当前位置:首页 > 个人总结系列-24JSON学习总结及CJson代码分析
JSON学子总结及CJson代码分析
“JSON”的全称是“JavaScript Object Notation”,即JavaScript对象符号,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON采用与编程语言无关的文本格式,但是也使用了类C语言(包括C、C++、C#、Java、JavaScript、Python等)的习惯,这些特性使JSON成为理想的数据交换格式。
JSON建构于两种结构: (1)“名称/值”对的集合。不同的语言中,其被理解为对象(“object”)、纪录(“record”)、结构(“struct”)、字典(“dictionary”)、哈希表(“hash table”)、有键列表(“keyed list”)或者关联数组(“associative array”)。 (2)值的有序列表。在大部分语言中,其被理解为数组(“array”)。
简单理解,JSON的定义由以下四句话就全部定义了。
? ? ? ?
并列的数据之间用逗号(”,”)分隔。 映射用冒号(”:”)表示。
并列数据的集合(数组)用方括号(\)表示。 映射的集合(对象)用大括号(”{}”)表示。
对JSON的解析
主要学习了通过一个简短的开源的C语言代码cJson对JSON格式数据进行解析。cJson的代码很简短,全部只有20KB左右,主要包含了解析、构造、编辑JSON数据,这些功能主要通过其自定义的cJSON数据结构。cJSON数据结构对JSON格式数据进行了描述,并通过程序提供了许多操作,cJSON数据结构定义如下所示:
/* The cJSON structure: */ typedef struct cJSON { struct cJSON *next,*prev; struct cJSON *child; int type; /* 如果该Json结构在数组中,则它的前后节点*/ /* 如果存在子对象,其第一个子对象*/ /* Json对象的类型*/ /* The item's string, if type==cJSON_String*/ /* The item's number, if type==cJSON_Number*/ /* The item's number, if type==cJSON_Number*/ char *valuestring; int valueint; double valuedouble; char *string; /* 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 = \鸟巢\\\奥
运
会
主
场
地
\\\
北
大
乒
乓
球
馆
\\\乒乓球比赛场地\\\北京工人体育场\\\足球比赛场地\\\
cJson中的基本函数主要总结如下: 函数功能 函数定义 解析函数 extern cJSON *cJSON_Parse(const char *value) 传入一个字符串,返回一个cJSON,可以通过if (!json)来判断解析是函数说明 否出错,如果出错,可以通过printf(\[%s]\\n\打印出错位置。
函数功能 函数定义 函数说明 打印cJSON extern char *cJSON_Print(cJSON *item) 传入一个cJSON,将会以排好版的格式打印JSON。 对上面的value进行解析并打印后,输出的效果如下所示: [{
\鸟巢\ \ { \ \ \ \ },
\奥运会主场地\ }, {
\北大乒乓球馆\ \ { \ \ \ \ },
\乒乓球比赛场地\ }, {
\北京工人体育场\ \ { \ \ \ \ },
\足球比赛场地\ }]
函数功能 函数定义 释放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。
共分享92篇相关文档