cjson提取嵌套对象-第6讲
Posted Linux编程学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cjson提取嵌套对象-第6讲相关的知识,希望对你有一定的参考价值。
假设有如下的 JSON 文件 1.json,内如下:
"Dest":"/sda1/FlashDisk","Src":["1.jpg","2.txt"]
在这个文件中,混合了普通元素和数组的使用,有:
1 普通元素: "Dest":"/sda1/FlashDisk"
2 数组元素:"Src":["1.jpg","2.txt"]
//========================================================================
那么,我们在解析的过程中,有:
1 打开 1.json 文件,读取数据;
2 把数据加载到 cJSON_Parse() 函数中解析;
3 调用 cJSON_GetObjectItem() 函数获取 Dest 元素,得到一个终端元素;
4 调用 cJSON_GetObjectItem() 函数获取 Src 元素,得到一个数组,此时,需要对该数组再次进行数组的遍历操作;
5 对数组调用 cJSON_GetArrayItem() 函数来获取数组元素;
6 最后,是否内存 cJSON_Delete();
//========================================================================
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "cJSON.h"
//========================================================
//========================================================
int main (int argc, const char * argv[])
int len, i;
char text[1024] = 0;
int fd = open("1.json", O_RDONLY);
if(fd < 0)
perror("open err!\\n");
return 1;
read(fd, text, 1024);
printf("text = %s\\n", text);
cJSON *json = NULL, *Dest = NULL, *Src = NULL;
json = cJSON_Parse(text);
if(!json)
printf("Error before: [%s]\\n",cJSON_GetErrorPtr());
return 1;
Dest = cJSON_GetObjectItem(json , "Dest");
if(Dest)
printf("Dest = %s\\n",Dest->valuestring);
//====================
//====================
Src = cJSON_GetObjectItem(json, "Src");
len = cJSON_GetArraySize(Src);
printf("len = %d\\n", len);
cJSON *item = NULL;
for(i = 0; i < len; i++)
item = cJSON_GetArrayItem(Src, i);
printf("Src[%d] = %s\\n",i, item->valuestring);
cJSON_Delete(json);
运行结果如下:
[openwrt@localhost64 test]$ ./test
text = "Src":["1.jpg","2.txt"],"Dest":"/sda1/FlashDisk"
Dest = /sda1/FlashDisk
len = 2
Src[0] = 1.jpg
Src[1] = 2.txt
韦凯峰 Linux C/C++零基础编程教程
Linux系统编程,Openwrt系统开发
以上是关于cjson提取嵌套对象-第6讲的主要内容,如果未能解决你的问题,请参考以下文章