当前位置:   article > 正文

json对象数组集合-第10讲_json集合

json集合


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

{
        "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系统开发

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/485483
推荐阅读
相关标签
  

闽ICP备14008679号