Разбор массива JSON из ответа curl в Tizen Native

Так что я новичок в Tizen Native Development и мне нужна помощь в разборе массива JSON из завитка ответа. Я смог опубликовать данные с помощью curl и получить ответ, используя этот фрагмент:

static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp){
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;

mem->memory = realloc(mem->memory, mem->size + realsize + 1);
if(mem->memory == NULL) {
  /* out of memory! */
  dlog_print(DLOG_DEBUG, TAG, "not enough memory (realloc returned NULL)\n");
  return 0;
  }

  memcpy(&(mem->memory[mem->size]), contents, realsize);
  mem->size += realsize;
  mem->memory[mem->size] = 0;
  dlog_print(DLOG_DEBUG, TAG, contents);

  return realsize;
}

Журнал будет печатать:

["423866","423865","423864","423862","423861","423856","423855","423851","423846","423844"]

Тем не менее, я не могу понять, как разобрать содержимое. Я прочитал много тем об использовании Json-glib, но не совсем понимаю, как его использовать. Кто-нибудь может помочь?

Обновление: так я публикую данные, используя curl.

/* get a curl handle */
curl = curl_easy_init();

if(curl) {
    dlog_print(DLOG_DEBUG, TAG, "curl init");
    dlog_print(DLOG_DEBUG, TAG, "curl url: %s", url);
  /* Set CURL parameters */
    /* First set the URL that is about to receive our POST. This URL can
    just as well be a https:// URL if that is what should receive the
    data. */
    curl_easy_setopt(curl, CURLOPT_URL, url);

    /* send all data to this function  */
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

    /* Now specify the POST data */
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "w=4");

    /* we pass our 'chunk' struct to the callback function */
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);

    /* some servers don't like requests that are made without a user-agent
     field, so we provide one */
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");

    /* Perform the request, res will get the return code */
    res = curl_easy_perform(curl);
    /* Check for errors */
    if(res != CURLE_OK)
        dlog_print(DLOG_DEBUG, TAG, "curl_easy_perform() Failed: %s\n",curl_easy_strerror(res));
    else{
        dlog_print(DLOG_DEBUG, TAG, "curl_easy_perform() Success");
        dlog_print(DLOG_DEBUG, TAG, "curl_code: %d", res);
        dlog_print(DLOG_DEBUG, TAG, "%d bytes retrieved\n", (long)chunk.size);
    }

    /* always cleanup */
    curl_easy_cleanup(curl);
    }
else{
    dlog_print(DLOG_DEBUG, TAG, "curl failed");
    }

Теперь я смог преобразовать содержимое в char:

char* test;
test = (char*) contents;
dlog_print(DLOG_DEBUG, TAG, "test value: %s", test);

Тем не менее, я думаю, что это стало как строка. Я хочу преобразовать его в массив и получить значения для каждого индекса.

2 ответа

Вам нужен JSON-GLIB.

добавлять

#include <json-glib.h>

Следующим шагом является создание экземпляра парсера следующим образом:

JsonParser *jsonParser  =  NULL;
GError *error  =  NULL;   
jsonParser = json_parser_new ();

ParseJsonEntity() в примере кода есть основной цикл для выполнения анализа JSON. Поскольку JSON имеет данные трех типов, такие как Object, Array, Value, основной цикл намеренно обнаруживает их и анализирует их содержимое.

Если текущий узел имеет тип 'object' или 'array', он продолжает анализировать дерево JSON ParseJsonEntity() рекурсивно. но в случае типа "значение", он извлекает значения ExtractValue(),

Следуйте этому руководству для более подробной информации. Пример приложения также приведен там.

Вы можете использовать это две библиотеки:

  1. restclient-cpp: https://github.com/mrtazz/restclient-cpp -
  2. rapidjson: http://rapidjson.org/md_doc_tutorial.html

Первый - это обертка для завитков. Он дает вам методы GET, POST и т. Д. Простым способом.

Второй упрощает разбор json.

Это библиотеки C++, поэтому вы можете написать свои методы для доступа к API в файле.cpp и экспортировать их в C с ключевым словом extern.

Другие вопросы по тегам