анализировать массивы json с помощью библиотеки cJSON

Во-первых, это очень широкий вопрос, и он может показаться, что я прошу сообщество написать мой код для меня. Это не входит в мои намерения, но я так растерян, что не знаю, как дать достаточно информации.

Я пытаюсь использовать библиотеку cJSON, написанную Дейвом Гэмблом, я обнаружил, что это очень полезно для моего встроенного устройства для разбора и составления JSON.

для чтения в следующем массиве JSON

{ 
 "name": "Jack", 
  "types":[23,56,78],
 "format": {
 "type": "rect",
  "width": 1920, } 
}

.. и анализ того, как объект работал с этим методом

  cJSON *format = cJSON_GetObjectItem(json,"format");

  int framerate = cJSON_GetObjectItem(format,"width")->valueint; 

но я не могу разобрать ключ "имя" и значение простого ключа объекта,

я пробовал это

  cJSON *array = cJSON_GetArrayItem(json,"types"); 

  int value = cJSON_GetArrayItem(format1,1)->valueint;

но не сработало, как разобрать объект массива и простое значение ключа..


person indra    schedule 29.04.2014    source источник
comment
Попробуйте использовать cJSON *array = cJSON_GetObjectItem(json,"types") для получения массива.   -  person ooga    schedule 29.04.2014
comment
привет, спасибо за это, это работает ... и как мне прочитать просто строку: значение? в моем примере я хочу прочитать имя: Джек ..   -  person indra    schedule 30.04.2014
comment
ganimede.ro/help/abljson/files/jsonParser-p. html#getStringValue   -  person ooga    schedule 30.04.2014


Ответы (2)


Я думаю, что элемент JSON должен соблюдать формат ключ: значение.

{ 
 "name": "Jack", 
  "types":[{"type" : 23}, {"type" : 56}, {"type":78}],
 "format": {
 "type": "rect",
  "width": 1920, } 
}
person lxgeek    schedule 30.05.2017

Ваш json в порядке. Вы можете перебирать массив значений в cJSON:

cJSON * array = cJSON_GetObjectItem(json, "types");
for (i = 0 ; i < cJSON_GetArraySize(array) ; i++)
{
    printf("%d ",cJSON_GetArrayItem(array, i)->valueint);
}

будет печатать

23 56 78
person mco    schedule 01.11.2017