数据交换格式
1、什么是数据交换格式
- 数据交换格式,就是服务器端与客户端之间进行数据传输与交换的格式。
- 前段领域,经常提及的两种数据交换格式分别是 XML 和 JSON。
- 其中 XML 用的非常少,所以,我们重点要学习的数据交换格式是 JSON。
2、XML
什么是XML
- XML 的英文全称是 EXtensible Markup Language,即可扩展标记语言。
- 因此,XML 和 HTML 类似,也是一种标记语言。
XML和 HTML的区别
- XML 和 HTML 虽然都说标记语言,但是,它们两者之间没有任何的关系。
- HTML 被设计用来描述网页上的内容,是网页内容的载体。
- XML 被设计用来传输和存储数据,是数据的载体。
XML 的缺点
- XML 格式臃肿,和数据无关的代码多,体积大,传输效率低。
- 在JavaScript 中解析 XML 比较麻烦。
3、JSON
什么是JSON
- 概念:JSON 的英文全称是 JavaScript Object Notation,即 JavaScript 对象表示法。
- 简单来讲,JSON 就是 JavaScript 对象和数组的字符串表示法。
- 它使用文本表示一个 JS 对象或数组的信息,因此,JSON 的本质是字符串。
- 作用:JSON 是一种轻量级的文本数据交换格式,在作用上类似于 XML,专门用于存储和传输数据。
- 但是JSON 比 XML 更小、更快、更易解析。
- 现状:JSON 是在 2001 年开始被推广和使用的数据格式,到现今为止,JSON 已经成为了主流的数据交换格式。
JSON的两种结构
- JSON 就是用字符串来表示 JavaScript 的对象和数组。
- 所以,JSON 中包含对象和数组两种结构,通过这两种结构的互相嵌套,可以表示各种复杂的数据结构。
1、对象结构
-
对象结构:对象结构在 JSON 中表示为 {} 括起来的内容。
- 数据结构为 {key: value,key: value, ...} 的键值对结构。
- 其中,key必须是使用英文的双引号包裹的字符串,value 的数据类型 可以是数字、字符串、布尔值、null、数组、对象 6种类型。
-
// 注:里面所有的值都必须用双引号括起来 { "name": "zs", "age": 20, "gender": "男", "address": null, "hobby": ["吃饭","睡觉","打豆豆"] }
2、数组结构
-
数组结构:数组结构在JSON 中表示为 [] 括起来的内容。
- 数据结构为 ["java","javascript",30,true]。
- 数组中数据结构的类型可以是数字、字符串、布尔值、null、数组、对象、6种类型。
-
["java","python","php"] [100,200,300.5] [true, false, null] [{"name":"zs", "age":20}, {"mame":"ls", "age":30}] [ ["苹果": "榴莲", "椰子"],[4, 50, 5] ]
3、JSON语法注意事项
- 属性名必须使用双引号包裹
- 字符串类型的值必须使用双引号包裹
- JSON 中不允许使用单引号表示字符串
- JSON 中不能写注释
- JSON 的最外层必须是对象或数组格式
- 不能使用 undefined 或函数作为 JSON 的值
- JSON的作用:在计算机与网络之间存储和传输数据。
- JSON的本质:用字符串来表示 JavaScript 对象数据或数组数据
4、JSON和JS对象的关系
-
JSON 是 JS对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
-
// 这是一个对象 let obj = {a: 'hello', b: 'world'} // 这是一个 JSON 字符串,本质就是一个字符串 let json = '{"a": "Hello", "b": "World"}'
-
5、JSON和JS对象的转换
-
要实现从 JSON 字符串转换为 JS 对象,使用 JSON.parse() 方法:
-
let json = `{"name": "码农权","age":20}`; console.log(JSON.parse(json)); // {name: "码农权", age: 20}
-
-
要实现从 JS对象 转换JSON 字符串,使用JSON.stringify()方法:
-
let obj = {name: "码农权", age: 20}; console.log(JSON.stringify(obj)); // '{"name": "码农权","age":20}'
-
6、序列化和反序列化
- 把数据对象 转换为 字符串的过程,叫做序列化,例如:调用 JSON.stringify() 函数的操作,叫做 JSON 序列化。
- 把字符串转换为数据对象的过程,叫做反序列化,例如:调用 JSON.parse() 函数的操作,叫做 JSON 反序列化