如何在不指定键的情况下使用cJSON库解析JSON数据?json结构为嵌套结构
时间: 2024-12-14 11:22:41 浏览: 3
cJSON源码,解析JSON数据
在cJSON库中,如果你想要遍历并访问嵌套的JSON数据而不指定具体的键,可以使用递归函数结合cJSON的`cJSON_ParseObject()`和`cJSON_GetObjectItem()`函数。首先,你需要包含必要的头文件,并初始化解析器:
```c
#include "cJSON.h"
```
然后创建一个递归函数,它接受一个JSON对象指针作为参数:
```c
void parseJson cJSON *root) {
if (cJSON_IsObject(root)) { // 检查是否为对象
cJSON *item;
cJSON_ArrayIterator it;
// 遍历对象的所有成员
for (it = cJSON_GetObjectItems(root); it.valid(); it.next()) {
item = it.value();
char *key = cJSON_GetObjectItemCaseSensitive(root, item->name)->string;
printf("Key: %s, Value: %s\n", key, cJSON_Print(item)); // 打印键值对
// 如果值也是对象或数组,继续递归
parseJson(item);
}
} else if (cJSON_IsArray(root)) {
cJSON *element;
cJSON_ArrayIterator it;
for (it = cJSON_GetArrayItem(root, 0); it.valid(); it.next()) {
element = it.value();
parseJson(element); // 对数组元素递归处理
}
}
}
```
最后,你可以调用这个函数并传入你的JSON字符串:
```c
const char *jsonStr = "{\"name\": \"John\", \"age\": 30, \"city\": {\"name\": \"New York\", \"population\": 8M}}";
cJSON *root = cJSON_Parse(jsonStr);
if (!root) {
/* handle error */
}
parseJson(root);
// 清理内存
cJSON_Delete(root);
```
阅读全文