Предполжим, что у нас есть вот такой текст JSON:
{
"name": "Мониторы 4K",
"resolutions": [
{
"width": 1280,
"height": 720
},
{
"width": 1920,
"height": 1080
},
{
"width": 3840,
"height": 2160
}
]
}
И нужно обработать по очереди элементы массива с параметрами разрешающей способности мониторов. Общий принцип следующий:
1. С помощью вызова cJSON_Parse из текста создается корневой объект cJSON.
2. С помощью вызова cJSON_GetObjectItem создается новый объект, соответствующий массиву. Для нашего примера в cJSON_GetObjectItem передается корневой объект cJSON и текстовое имя массива "resolutions".
3. С помощью вызова cJSON_GetArraySize, куда передается cJSON массива, вычисляется количество элементов в массиве. Для нашего примера это 3 элемента.
4. Осуществляется цикл по элементам массива с помощью вызовов cJSON_GetArrayItem, куда передается cJSON массива и индекс элемента. Для нашего примера индекс будет от 0 до 2 включительно.
Соответствующий код примера обработки массива JSON:
bool readingJSON (char *JSONtxt)
{
bool result = false;
cJSON *jroot = NULL; // корневой объект
cJSON *jarray = NULL; // объект массива
cJSON *jitem = NULL; // объект элемента массива
cJSON *jvalue = NULL; // объект значения параметра элемента массива
do
{
// Получение корневого cJSON:
jroot = cJSON_Parse(JSONtxt);
if (NULL == jroot)
break;
// Получение объекта cJSON, соответствующий массиву:
jarray = cJSON_GetObjectItem(jroot, "resolutions");
if (NULL == jarray)
break;
// Получение количества элементов в массиве:
int numitems = cJSON_GetArraySize(jarray);
// Цикл по элементам массива:
for (index = 0; index < numitems; index++)
{
// Извлечение элемента массива:
jitem = cJSON_GetArrayItem(jarray, index);
if (NULL == jitem)
break;
// Здесь могут быть какие-нибудь операции
// с элементами массива, например:
jvalue = cJSON_GetObjectItem(jitem, "width");
if (NULL == jvalue)
break;
printf("Ширина %d\n", cJSON_GetNumberValue(jvalue));
jvalue = cJSON_GetObjectItem(jitem, "height");
if (NULL == jvalue)
break;
printf("Высота %d\n", cJSON_GetNumberValue(jvalue));
}
result = (index == numitems) ? true : false;
}while(false);
return result;
}
[Ссылки]
1. Как добавлять объекты в массив cJSON. |