Esempio n. 1
0
static int excavate_json_object (JsonNode *node,
				 int *n_objects,
				 PRN *prn)
{
    JsonObject *obj = json_node_get_object(node);
    int err = 0;

    if (obj == NULL) {
	return E_DATA;
    }

    if (json_object_get_size(obj) > 0) {
	GList *list = json_object_get_values(obj);
	struct jsdata jsd = {
	    n_objects,
	    &err,
	    prn
	};

	list = json_object_get_values(obj);
	g_list_foreach(list, show_obj_value, &jsd);
	g_list_free(list);
    }

    return err;
}
Esempio n. 2
0
/*!
 * Recursive function that handles converging \c JsonNode's to \c
 * GNode's.
 *
 * \param root \c Root JsonNode to convert.
 * \param node \c GNode.
 * \param parsing_array \c true if handling an array, else \c false.
 */
static void
clr_oci_json_parse_aux(JsonNode* root, GNode* node, bool parsing_array) {
	guint i;

	g_assert (root);
	g_assert (node);

	if (JSON_NODE_TYPE(root) == JSON_NODE_OBJECT) {
		JsonObject *object = json_node_get_object(root);

		if (object) {
			guint j;
			guint size;
			GList* keys, *key = NULL;
			GList* values, *value = NULL;

			size = json_object_get_size(object);
			keys = json_object_get_members(object);
			values = json_object_get_values(object);
			node = g_node_append(node, g_node_new(NULL));

			for (j = 0, key = keys, value = values; j < size; j++) {
				if (key) {
					node = g_node_append(node->parent, g_node_new(g_strdup(key->data)));
				}
				if (value) {
					clr_oci_json_parse_aux(value->data, node, false);
				}

				key = g_list_next(key);
				value = g_list_next(value);
			}

			if (keys) {
				g_list_free(keys);
			}
			if (values) {
				g_list_free(values);
			}
		}
	} else if (JSON_NODE_TYPE(root) == JSON_NODE_ARRAY) {
		JsonArray* array = json_node_get_array(root);
		guint array_size = json_array_get_length (array);
		JsonNode *array_element;

		for (i = 0; i < array_size; i++) {
			array_element = json_array_get_element(array, i);
			clr_oci_json_parse_aux(array_element, node, true);
		}
	} else if (JSON_NODE_TYPE(root) == JSON_NODE_VALUE) {
		node = g_node_append(node, g_node_new(clr_oci_json_string(root)));

		if (parsing_array) {
			node = g_node_append(node, g_node_new(NULL));
		}
	}
}
Esempio n. 3
0
static void
_got_trending_topic_updates_cb (RestProxyCall *call,
                                const GError  *error_in,
                                GObject       *weak_object,
                                gpointer       userdata)
{
  SwTwitterItemViewPrivate *priv = GET_PRIVATE (weak_object);
  SwItemView *item_view = SW_ITEM_VIEW (weak_object);
  SwSet *set;
  JsonParser *parser;
  JsonObject *root_o;
  SwService *service;
  GError *error = NULL;

  if (error_in) {
    g_warning (G_STRLOC ": Error getting trending topic data: %s", error_in->message);
    return;
  }

  service = sw_item_view_get_service (SW_ITEM_VIEW (item_view));

  set = sw_item_set_new ();
  parser = json_parser_new ();

  if (!json_parser_load_from_data (parser,
                                   rest_proxy_call_get_payload (call),
                                   rest_proxy_call_get_payload_length (call),
                                   &error))
  {
    g_warning (G_STRLOC ": error parsing json: %s", error->message);
  } else {
    JsonNode *root_n;
    JsonObject *trends_o;
    JsonArray *trends_a;
    GList *values;
    gint i;

    root_n = json_parser_get_root (parser);
    root_o = json_node_get_object (root_n);

    trends_o = json_object_get_object_member (root_o, "trends");

    /* We have to assume just the one object member */
    if (json_object_get_size (trends_o) == 1)
    {
      values = json_object_get_values (trends_o);
      trends_a = json_node_get_array ((JsonNode *)(values->data));

      for (i = 0; i < json_array_get_length (trends_a); i++)
      {
        JsonObject *trend_o;
        SwItem *item;

        item = sw_item_new ();
        sw_item_set_service (item, service);

        trend_o = json_array_get_object_element (trends_a, i);

        sw_item_take (item, "date", sw_time_t_to_string (time(NULL)));
        sw_item_put (item, "id", json_object_get_string_member (trend_o,
                                                                "name"));
        sw_item_put (item, "content", json_object_get_string_member (trend_o,
                                                                     "name"));

        sw_set_add (set, (GObject *)item);
        g_object_unref (item);
      }
      g_list_free (values);
    }
  }


  sw_item_view_set_from_set (SW_ITEM_VIEW (item_view),
                             set);

  /* Save the results of this set to the cache */
  sw_cache_save (service,
                 priv->query,
                 priv->params,
                 set);

  sw_set_unref (set);
  g_object_unref (parser);
}