Итерация вложенного объекта cJSON в c

Как перебрать вложенный объект cJSON? я хочу получить (напечатать) все ключи и значения из родительского объекта deviceData в C. Это объект cJson.

 obj =     {      "command": "REPLACE_ROWS",
            "table": "Device.XXX",
            "deviceData": {
                    "device0": {
                      "DeviceName": "Filtered Device",
                        "MACAddress": "112233445599"
                    },
                    "device1": {
                        "DeviceName": "Filtered Device",
                        "MACAddress": "112233445599"
                    },
                    "device2": {
                        "DeviceName": "Filtered Device",
                        "MACAddress": "112233445599"
                    }
           }
    };

как распечатать ключи deviceData (ex device0 device1 device 2 и т. д.) в C. Заранее спасибо.

2 ответа

Решение

Если бы obj это строка, содержащая ваш объект, вы анализируете его, а затем используете next итерировать:

cJSON * root = cJSON_Parse(obj);
cJSON * deviceData = cJSON_GetObjectItem(root,"deviceData");
if( deviceData ) {
   cJSON *device = deviceData->child;
   while( device ) {
      // get and print key
      device = device->next;
   }
}

В документации cJSON есть комментарий об итерации по объекту:

Чтобы перебрать объект, вы можете использовать макрос cJSON_ArrayForEach так же, как и для массивов.

Смотрите: https://github.com/DaveGamble/cJSON

cJSON_ArrayForEach macro в основном делает то же самое, что и предложение ilya, но избегает использования деталей реализации cJSON.

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