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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦凯峰Linux编程学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值