一、JSON是什么?

JSON ( JavaScript Object Notation) ,是一种数据交互格式。

二、为什么产生JSON技术?

JSON之前,数据传递都是用XML。XML 是一种纯文本格式,适合在网络上交换数据,但是 XML 格式比较复杂,查看学习成本较高,为了解决这个问题,道格拉斯·克罗克福特(Douglas Crockford)发明了JSON 这种超轻量级的数据交换格式,言简意赅,甚至一看就能清楚传递的是什么。

三、相比 XML 的不同之处

如果对XML有了解的同学可以看这里,不了解的可以直接忽略。

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

四、JSON 如何使用

JSON 实际上是 JavaScript 的一个子集,所以JSON 的数据格式和 JavaScript 是对应的:

①数据格式

  1. - number => JS number
  2. - boolean => JS boolean
  3. - string => JS string //
  4. - null => JS null
  5. - array => JS Array 的表达方式 []
  6. - object => JS {} 表达式

②注意事项

  • JSON 规定字符集是UTF-8,字符串必须使用””,Object 的键也必须使用””,数据格式严禁中文符号。
  • 数组或对象的最后一个成员,不能加逗号。

**

③JSON语法规则

JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

④JSON名称/值对

JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

  1. "firstName" : "John"

这很容易理解,等价于这条 JavaScript 语句:

  1. firstName = "John"

⑤JSON值

JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

⑥JSON对象

JSON 对象在花括号中书写:

对象可以包含多个名称/值对:

  1. { "firstName":"John" , "lastName":"Doe" }

⑦JSON数组

JSON 数组在方括号中书写:

数组可包含多个对象:

  1. {
  2. "students":[
  3. { "firstName":"John" , "lastName":"Doe" },
  4. { "firstName":"Anna" , "lastName":"Smith" },
  5. { "firstName":"Peter" , "lastName":"Jones" }
  6. ]
  7. }

在上面的例子中,对象 “students” 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

五、移植cJson以及使用

cJson源码下载:https://github.com/faycheng/cJSON
网盘下载地址:链接:https://pan.baidu.com/s/1_xSlc7dK_uGZ7p9bObI6Fg
提取码:0q77

常用函数:

  1. //cJSON 对象
  2. typedef struct cJSON {
  3. struct cJSON *next,*prev; /* 链表结构,方便遍历与查找 */
  4. struct cJSON *child; /* 子数据指针,如果当前节点有子节点,将填充在此位置 */
  5. int type; /* 项目类型,根据前两项具体指向赋值 */
  6. char *valuestring; /* 如果类型是字符串类型,将在此处赋值 */
  7. int valueint; /* 如果类型是整形,将在此处赋值 */
  8. double valuedouble; /* 如果类型是小数,将在此处赋值 */
  9. char *string; /* 项目的名称字符串. */
  10. } cJSON;
  11. /**************************************
  12. *
  13. *功能:创建一个cJSON节点,并设置节点类型为cJSON_Object
  14. *参数:无
  15. *返回值:指向一个cJSON_Object类型节点的指针
  16. *
  17. ***************************************/
  18. cJSON *cJSON_CreateObject(void);
  19. /**************************************
  20. *
  21. *功能:将item节点的名称设置为string。如果object节点有没有子节点,就将item设置为object子节点,
  22. * 否则将item添加object->child链表的尾部,成为object->child的兄弟节点
  23. *参数:无
  24. *返回值:指向一个cJSON_Object类型节点的指针
  25. *
  26. ***************************************/
  27. void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
  28. /**************************************
  29. *
  30. *功能:创建一个cJSON_Array类型的节点
  31. *参数:无
  32. *返回值:无
  33. *
  34. ***************************************/
  35. cJSON *cJSON_CreateArray(void);