在c中迭代cJSON嵌套对象

时间:2016-01-19 12:12:24

标签: c cjson

如何迭代嵌套的cJSON对象?我想从C中的deviceData父对象获取(打印)所有键和值。它是一个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"
                    }
           }
    };

如何在C中打印deviceData的密钥(ex device0 device1 device 2等)。提前感谢。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

cJSON文档中有关于迭代对象的注释:

  

要遍历对象,可以使用与数组相同的方式使用cJSON_ArrayForEach宏。

请参阅:https://github.com/DaveGamble/cJSON#objects

cJSON_ArrayForEach宏与ilya的提案基本相同,但它避免依赖于cJSON实现细节。