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讲的主要内容,如果未能解决你的问题,请参考以下文章

cjson提取嵌套对象-第6讲

json嵌套对象提取-第7讲

json嵌套对象提取-第7讲

json嵌套对象提取-第7讲

json解析字符串-第2讲

json解析字符串-第2讲