+static GList *
+parse_json (const char *json_data, goffset length)
+{
+ JsonParser *parser = NULL;
+ JsonNode *root = NULL;
+ GError *error = NULL;
+ GList *list = NULL;
+
+ parser = json_parser_new ();
+
+ json_parser_load_from_data (parser, json_data, length, &error);
+ if (error)
+ {
+ g_warning ("Unable to parse data '%s': %s\n",
+ json_data, error->message);
+ g_error_free (error);
+ g_object_unref (parser);
+ return list;
+ }
+
+ /* Don't free */
+ root = json_parser_get_root (parser);
+ JsonArray *response = json_node_get_array (root);
+
+ /* The response is expected with the following format:
+ * [ SEARCH_TERM ,[ SEARCH_RESULT_1, SEARCH_RESULT_N]] */
+
+ if (json_array_get_length (response) != 2) {
+
+ g_warning ("Wrong response format: %s\n", json_data);
+
+ g_object_unref (parser);
+ return list;
+ }
+
+ const gchar *search_term = json_array_get_string_element (response, 0);
+ g_message ("Searched for: %s\n", search_term);
+
+ JsonArray *results = json_array_get_array_element (response, 1);
+ int i;
+ int array_length = json_array_get_length (results);
+
+ for (i = 0; i < array_length; i++) {
+ const gchar *result =
+ json_array_get_string_element (results, i);
+ g_message ("Result %d: %s\n", i, result);
+ }
+
+ g_object_unref (parser);
+
+ return list;
+}
+