Программирование ARM cJSON: как прочитать массив JSON Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


cJSON: как прочитать массив JSON Печать
Добавил(а) microsin   

Предполжим, что у нас есть вот такой текст 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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page