cJSON解析过程

为什么使用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;
好了,到这里就结束了		

好了,到这里就结束了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值