为什么使用cJSON
cJSON简洁、方便,而且文件体积不大,效率还高,只有一个cJSON.c和cJSON.h文件,我们只需要将这两个文件拷贝到我们的工程下就可以使用了
如何使用cJSON解析
cJSON解析过程简单,一般只需要用到下面几个api函数
cJSON *cJSON_Parse(const char *value);
解析cJSON数据包,并按照cJSON结构体的结构序列化整个数据包,并开辟一块内存存储cJSON结构体,成功则返回结构体指针,失败NULL
cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
从object结构体中,查找子节点string,并将子节点内容序列化到cJSON结构体中
int cJSON_GetArraySize(cJSON *array)
获取数组的个数
cJSON *cJSON_GetArrayItem(cJSON *array,int item)
从数组array结构体中,查找第item个,并将子节点内容序列化到cJSON结构体中
void cJSON_Delete(cJSON *c)
释放位于堆中cJSON结构体内存
item->valuestring和item->valueint是常用来获取元素的值;
使用cJSON解析列程
1、首先创建一个C语言的字符串
#define json_string "{
\"person\":{
\"name\":\"d\",
\"array\":[1,2],
\"height\":12,
\"age\":25}
}"
2、在解析时最好根据解析内容,创建一个结构体
typedef struct
{
char name[8];
uint8_t array[2];
uint8_t age;
uint8_t height;
}person;
3、解析过程
person* people=malloc(sizeof(person));
cJSON * root=cJSON_Parse(json_string);
cJSON* obeject=cJSON_GetObjectItem(root,"person");
cJSON* item;
item=cJSON_GetObjectItem(obeject,"name");
memcpy(people->name,item->valuestring,strlen(item->valuestring));
item=cJSON_GetObjectItem(obeject,"array");
int size=cJSON_GetArraySize (item);
for(i=0;i<size;i++)
{
cJSON* it = cJSON_GetArrayItem(item, i);
people->array[i]=it->valueint;
}
item=cJSON_GetObjectItem(obeject,"age");
people->age=(uint8_t)item->valueint;
item=cJSON_GetObjectItem(obeject,"height");
people->height=(uint8_t)item->valueint;
cJSON_Delete(root);
printf("firstname:%s,age:%d,array[0]=%d,array[1]=%d,height:%d \n\r",
people->name,people->age,people->array[0],people->array[1],people->height);
free(people);
people=NULL;
好了,到这里就结束了
好了,到这里就结束了