2016-11-07 4 views
0

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

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; 
} 

DLoG напечатает:

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

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

Обновление: Вот как я отправляю данные с помощью завитка.

/* 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* test; 
test = (char*) contents; 
dlog_print(DLOG_DEBUG, TAG, "test value: %s", test); 

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

+0

Вы предоставили процедуру для получения JSON. Что вы пытались разобрать JSON? –

+0

Это полное значение JSON? Если это так, это массив, но не массив JSON. –

+0

@AL. да его полное значение JSON. У меня тяжелое время в типе данных, так как вы видите, что тип данных содержимого недействителен. Поэтому я не знаю, как преобразовать его в массив JSON или в простой массив. – BradlyMan

ответ

0

Необходимо JSON-GLIB.

Добавить

#include <json-glib.h> 

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

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

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

Если текущий узел «объекта» или «массива» типа, он по-прежнему разобрать JSON дерево, ParseJsonEntity() рекурсивно. но в случае типа «значение» он извлекает значения на ExtractValue().

Для получения дополнительной информации следуйте this tutorial. Пример приложения также предоставляется там.

+0

Моя проблема заключается в том, как преобразовать переменную void * content в JSON-синтаксический анализ. – BradlyMan

+0

Вы следили за учебниками? –

0

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

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

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

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

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

Смежные вопросы