json对象数组集合-第10讲

Posted Linux编程学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json对象数组集合-第10讲相关的知识,希望对你有一定的参考价值。


假设我们有如下是一组数据:


        "my_array":     [
                        "name": "www",
                        "age":  120
                ,
                        "name": "wkf",
                        "age":  121
                ,
                        "name": "abc",
                        "age":  122
                ]

其中 "my_array" 是元素的名称,后面是元素的数据。数据一个数组。

韦凯峰 Linux C/C++零基础编程教程
Linux系统编程,Openwrt系统开发

//========================================================================

这是一个数组,每一个数组元素是一个结构体信息。

那么,我们可以解析每一个元素的信息,步骤如下:

    cJSON* json = NULL;
    json = cJSON_Parse(p);
    if(!json)
    
        printf("parse err!\\n");
        return;
    

    cJSON* set = cJSON_GetObjectItem(json, "my_array");
    int set_len = cJSON_GetArraySize(set);

    printf("set_len = %d\\n", set_len);
    
    for(i = 0; i < set_len; i++)
    
        cJSON* item = cJSON_GetArrayItem(set, i);

        cJSON* obj = cJSON_GetObjectItem(item, "name");
        printf("name = %s\\n", obj->valuestring);

        obj = cJSON_GetObjectItem(item, "age");
        printf("age = %d\\n", obj->valueint);
        
    

//========================================================================

可以看到,通过 cJSON* item = cJSON_GetArrayItem(set, i); 获取数组中的一个 元素;

那么,元素是一个结构体,再提起结构体中的数据:

        cJSON* obj = cJSON_GetObjectItem(item, "name");
        printf("name = %s\\n", obj->valuestring);

        obj = cJSON_GetObjectItem(item, "age");
        printf("age = %d\\n", obj->valueint);

此时,提取元素中的 "name" 和 "age" 属性;

//========================================================================

完整测试代码如下:

void json_create(void)

    char *p;
    int i;

    cJSON *root = cJSON_CreateObject();

    cJSON *array = cJSON_CreateArray();
    cJSON_AddItemToObject(root, "my_array", array);
    p = cJSON_Print(root);
    printf("p = %s\\n", p);
    free(p);
    //==============================================
    char* name[] = "www", "wkf", "abc";
    int age[] = 120, 121, 122;
    for(i = 0; i < 3; i++)
    
        cJSON *obj = cJSON_CreateObject();
        cJSON_AddItemToArray(array, obj);

        cJSON_AddItemToObject(obj, "name", cJSON_CreateString(name[i]));
        cJSON_AddItemToObject(obj, "age", cJSON_CreateNumber(age[i]));
    
    p = cJSON_Print(root);
    printf("p = %s\\n", p);
    //free(p);
    //========================
    //========================
    cJSON* json = NULL;
    json = cJSON_Parse(p);
    if(!json)
    
        printf("parse err!\\n");
        return;
    

    cJSON* set = cJSON_GetObjectItem(json, "my_array");
    int set_len = cJSON_GetArraySize(set);

    printf("set_len = %d\\n", set_len);
    
    for(i = 0; i < set_len; i++)
    
        cJSON* item = cJSON_GetArrayItem(set, i);

        cJSON* obj = cJSON_GetObjectItem(item, "name");
        printf("name = %s\\n", obj->valuestring);

        obj = cJSON_GetObjectItem(item, "age");
        printf("age = %d\\n", obj->valueint);
        
    
    free(p);
    cJSON_Delete(root);

//========================================================================
运行结果如下:

p =
        "my_array":     []

p =
        "my_array":     [
                        "name": "www",
                        "age":  120
                ,
                        "name": "wkf",
                        "age":  121
                ,
                        "name": "abc",
                        "age":  122
                ]

set_len = 3
name = www
age = 120
name = wkf
age = 121
name = abc
age = 122

韦凯峰 Linux C/C++零基础编程教程
Linux系统编程,Openwrt系统开发

以上是关于json对象数组集合-第10讲的主要内容,如果未能解决你的问题,请参考以下文章

json对象数组集合-第10讲

指针操作字符串

使用 Mongoose 从 JSON 对象数组中查询具有匹配 ID 的集合

cjson提取嵌套对象-第6讲

cjson提取嵌套对象-第6讲

cjson提取嵌套对象-第6讲