赞
踩
假设我们有如下是一组数据:
{
"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系统开发
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。