static void twitter_status_build (TwitterStatus *status, JsonNode *node) { TwitterStatusPrivate *priv = status->priv; JsonObject *obj; JsonNode *member; if (!node || JSON_NODE_TYPE (node) != JSON_NODE_OBJECT) return; obj = json_node_get_object (node); member = json_object_get_member (obj, "user"); if (member) { priv->user = twitter_user_new_from_node (member); g_object_ref_sink (priv->user); priv->user_changed_id = g_signal_connect (priv->user, "changed", G_CALLBACK (user_changed_cb), status); } member = json_object_get_member (obj, "source"); if (member) priv->source = json_node_dup_string (member); member = json_object_get_member (obj, "created_at"); if (member) priv->created_at = json_node_dup_string (member); member = json_object_get_member (obj, "id"); if (member) priv->id = json_node_get_int (member); member = json_object_get_member (obj, "truncated"); if (member) priv->truncated = json_node_get_boolean (member); member = json_object_get_member (obj, "text"); if (member) priv->text = json_node_dup_string (member); member = json_object_get_member (obj, "in_reply_to_user_id"); if (member) priv->in_reply_to_user_id = json_node_get_int (member); member = json_object_get_member (obj, "in_reply_to_status_id"); if (member) priv->in_reply_to_status_id = json_node_get_int (member); }
/*! * Convert the specified \c JsonNode into a string. * * \param node \c JsonNode. * \return Newly-allocated string on success, else \c NULL. */ static gchar * clr_oci_json_string (JsonNode* node) { gchar buffer[NODE_BUF_SIZE]; GType valueType = json_node_get_value_type(node); switch (valueType) { case G_TYPE_STRING: return json_node_dup_string(node); case G_TYPE_DOUBLE: case G_TYPE_FLOAT: g_snprintf(buffer, NODE_BUF_SIZE, "%f", json_node_get_double(node)); break; case G_TYPE_INT: case G_TYPE_INT64: g_snprintf(buffer, NODE_BUF_SIZE, "%ld", json_node_get_int(node)); break; case G_TYPE_BOOLEAN: if (json_node_get_boolean(node)) { g_snprintf(buffer, NODE_BUF_SIZE, "%s", "true"); } else { g_snprintf(buffer, NODE_BUF_SIZE, "%s", "false"); } break; default: g_snprintf(buffer, NODE_BUF_SIZE, "%s", "Unknown type"); break; } return g_strdup(buffer); }
GHashTable * json_ghashtable_deserialize (JsonNode *node, GError **error) { GHashTable *table = NULL; GList *k; GList *keys; JsonNode *node_value; JsonObject *object; gchar *value; if (!node || !JSON_NODE_HOLDS_OBJECT (node)) { g_set_error_literal (error, JSON_READER_ERROR, JSON_READER_ERROR_NO_OBJECT, "Expected JSON object"); return table; } object = json_node_get_object (node); keys = json_object_get_members (object); table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); for (k = keys; k ; k = g_list_next (k)) { node_value = json_object_get_member (object, k->data); if (!JSON_NODE_HOLDS_VALUE (node_value) || (value = json_node_dup_string (node_value)) == NULL) { g_set_error_literal (error, JSON_READER_ERROR, JSON_READER_ERROR_INVALID_TYPE, "Expected JSON string"); g_hash_table_unref (table); table = NULL; break; } else { g_hash_table_insert (table, g_strdup (k->data), value); } } g_list_free (keys); json_object_unref (object); return table; }
static gboolean read_config_file(AppContext *app, GError **err) { JsonNode *root; JsonParser *parser; parser = json_parser_new (); if (!json_parser_load_from_file (parser, app->config_filename, err)) { g_object_unref(parser); return FALSE; } root = json_parser_get_root(parser); if (JSON_NODE_HOLDS_OBJECT(root)) { JsonNode *value_node; JsonObject *root_obj = json_node_get_object(root); value_node = json_object_get_member(root_obj, "extensionPort"); if (value_node && JSON_NODE_HOLDS_VALUE(value_node)) { app->http_port = json_node_get_int(value_node); } value_node = json_object_get_member(root_obj, "httpRootPath"); if (value_node && JSON_NODE_HOLDS_VALUE(value_node)) { GFile *base; GFile *http_root; GFile *config; char *path = json_node_dup_string(value_node); config = g_file_new_for_path(app->config_filename); base = g_file_get_parent(config); g_object_unref(config); g_free(app->http_root); http_root = g_file_resolve_relative_path (base, path); g_free(path); g_object_unref(base); if (http_root) { app->http_root = g_file_get_path(http_root); g_debug("HTTP root: %s", app->http_root); g_object_unref(http_root); } } } g_object_unref(parser); return TRUE; }
GList* cometd_msg_supported_connection_types(JsonNode* node) { g_return_val_if_fail(JSON_NODE_HOLDS_OBJECT (node), NULL); JsonObject* obj = json_node_get_object(node); JsonArray* arr = json_object_get_array_member(obj, "supportedConnectionTypes"); if (!arr) return NULL; GList *types = NULL, *ielem = NULL; GList* items = json_array_get_elements(arr); for (ielem = items; ielem; ielem = g_list_next(ielem)) types = g_list_prepend(types, json_node_dup_string(ielem->data)); types = g_list_reverse(types); g_list_free(items); return types; }