一、JSON是什么?
JSON ( JavaScript Object Notation) ,是一种数据交互格式。
二、为什么产生JSON技术?
JSON之前,数据传递都是用XML。XML 是一种纯文本格式,适合在网络上交换数据,但是 XML 格式比较复杂,查看学习成本较高,为了解决这个问题,道格拉斯·克罗克福特(Douglas Crockford)发明了JSON 这种超轻量级的数据交换格式,言简意赅,甚至一看就能清楚传递的是什么。
三、相比 XML 的不同之处
如果对XML有了解的同学可以看这里,不了解的可以直接忽略。
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的 JavaScript eval() 方法进行解析
- 使用数组
- 不使用保留字
四、JSON 如何使用
JSON 实际上是 JavaScript 的一个子集,所以JSON 的数据格式和 JavaScript 是对应的:
①数据格式
- number => JS number- boolean => JS boolean- string => JS string //- null => JS null- array => JS Array 的表达方式 []- object => JS {} 表达式
②注意事项
- JSON 规定字符集是UTF-8,字符串必须使用””,Object 的键也必须使用””,数据格式严禁中文符号。
- 数组或对象的最后一个成员,不能加逗号。
③JSON语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
④JSON名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName" : "John"
这很容易理解,等价于这条 JavaScript 语句:
firstName = "John"
⑤JSON值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
⑥JSON对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
⑦JSON数组
JSON 数组在方括号中书写:
数组可包含多个对象:
{"students":[{ "firstName":"John" , "lastName":"Doe" },{ "firstName":"Anna" , "lastName":"Smith" },{ "firstName":"Peter" , "lastName":"Jones" }]}
在上面的例子中,对象 “students” 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
五、移植cJson以及使用
cJson源码下载:https://github.com/faycheng/cJSON
网盘下载地址:链接:https://pan.baidu.com/s/1_xSlc7dK_uGZ7p9bObI6Fg
提取码:0q77
常用函数:
//cJSON 对象typedef struct cJSON {struct cJSON *next,*prev; /* 链表结构,方便遍历与查找 */struct cJSON *child; /* 子数据指针,如果当前节点有子节点,将填充在此位置 */int type; /* 项目类型,根据前两项具体指向赋值 */char *valuestring; /* 如果类型是字符串类型,将在此处赋值 */int valueint; /* 如果类型是整形,将在此处赋值 */double valuedouble; /* 如果类型是小数,将在此处赋值 */char *string; /* 项目的名称字符串. */} cJSON;/****************************************功能:创建一个cJSON节点,并设置节点类型为cJSON_Object*参数:无*返回值:指向一个cJSON_Object类型节点的指针****************************************/cJSON *cJSON_CreateObject(void);/****************************************功能:将item节点的名称设置为string。如果object节点有没有子节点,就将item设置为object子节点,* 否则将item添加object->child链表的尾部,成为object->child的兄弟节点*参数:无*返回值:指向一个cJSON_Object类型节点的指针****************************************/void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);/****************************************功能:创建一个cJSON_Array类型的节点*参数:无*返回值:无****************************************/cJSON *cJSON_CreateArray(void);
