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