《个人总结系列24JSON学习总结及CJson代码分析.docx》由会员分享,可在线阅读,更多相关《个人总结系列24JSON学习总结及CJson代码分析.docx(6页珍藏版)》请在三一办公上搜索。
1、个人总结系列24JSON学习总结及CJson代码分析JSON学子总结及CJson代码分析 “JSON”的全称是“JavaScript Object Notation”,即JavaScript对象符号,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 JSON建构于两种结构: “名称/值”对的集合。不同的语言中,其被理解为对象、纪录、结构、字典、哈希表、有键列表或者关联数组。 值的有序列表。在大部分语言中,其被理解为数组。 简单理解,JSON的定义由以下四句话就全部定
2、义了。 l l l l 并列的数据之间用逗号分隔。 映射用冒号表示。 并列数据的集合用方括号表示。 映射的集合用大括号表示。 对JSON的解析 主要学习了通过一个简短的开源的C语言代码cJson对JSON格式数据进行解析。cJson的代码很简短,全部只有20KB左右,主要包含了解析、构造、编辑JSON数据,这些功能主要通过其自定义的cJSON数据结构。cJSON数据结构对JSON格式数据进行了描述,并通过程序提供了许多操作,cJSON数据结构定义如下所示: /* The cJSON structure: */ typedef struct cJSON struct cJSON *next,*p
3、rev; struct cJSON *child; int type; /* 如果该Json结构在数组中,则它的前后节点*/ /* 如果存在子对象,其第一个子对象*/ /* Json对象的类型*/ /* The items string, if type=cJSON_String*/ /* The items number, if type=cJSON_Number*/ /* The items number, if type=cJSON_Number*/ char *valuestring; int valueint; double valuedouble; char *string; /*
4、 Json对象的名字*/ cJSON; Json对象的类型 /* cJSON Types: */ #define cJSON_False 0 #define cJSON_True 1 #define cJSON_NULL 2 #define cJSON_Number 3 #define cJSON_String 4 #define cJSON_Array 5 #define cJSON_Object 6 以下通过下面的JSON格式数据为例分析cJson中的基本函数,数据在C语言中表示如下: char * value = name:鸟巢,point:lat:39.990,lng:116.397,
5、desc:奥运会主场地,name:北大乒乓球馆,point:lat:39.988,lng:116.315,desc:乒乓球比赛场地,name:北京工人体育场,point:lat:39.930,lng:116.446,desc:足球比赛场地 cJson中的基本函数主要总结如下: 函数功能 函数定义 解析函数 extern cJSON *cJSON_Parse(const char *value) 传入一个字符串,返回一个cJSON,可以通过if (!json)来判断解析是函数说明 否出错,如果出错,可以通过printf(Error before: %sn,cJSON_GetErrorPtr)打印
6、出错位置。 函数功能 函数定义 函数说明 打印cJSON extern char *cJSON_Print(cJSON *item) 传入一个cJSON,将会以排好版的格式打印JSON。 对上面的value进行解析并打印后,输出的效果如下所示: name: 鸟巢, point: lat: 39.990, lng: 116.397 , desc: 奥运会主场地 , name: 北大乒乓球馆, point: lat: 39.988, lng: 116.315 , desc: 乒乓球比赛场地 , name: 北京工人体育场, point: lat: 39.930, lng: 116.446 , de
7、sc: 足球比赛场地 函数功能 函数定义 释放cJSON内存空间 extern void cJSON_Delete(cJSON *c) 获得了一个cJSON,当使用完了之后要删除,因为返回的cJSON是函数说明 通过malloc的方式分配的,如果用完不及时释放会造成内存泄露。 函数功能 函数定义 获取cJSON大小 extern int cJSON_GetArraySize(cJSON *array) 返回数组或对象中的大小,只要该对象下包括其他对象,各对象一般函数说明 以“,”分隔。 函数功能 函数定义 函数说明 函数功能 以名称的方式获取cJSON数组或对象相应的项 extern cJSON *cJSON_GetObjectItem(cJSON *object,const char 函数定义 *string) 函数说明 以index的方式获取cJSON数组或对象相应的项 extern cJSON *cJSON_GetArrayItem(cJSON *array,int item) 返回数组或对象中相应index的项,找不到会返回NULL。 获取当前cJSON对象下有名字的cJSON对象,找不到会返回NULL。