数据交换格式
数据交互格式,就是服务器端与客户端之间进行数据传输与交换的格式
前端领域,经常提及的两种数据交换格式分别为XML和JSON。XML用得非常少,所以,重点学习的数据交互格式是JSON。
XML
什么是XML
XML,即可扩展标记语言。因为它也是一种标记语言因此XML和HTML类似。
<note> <!-- note表明这是一条消息 -->
<to>ls</to> <!-- 指定消息发送的对象 -->
<from>zs</from> <!-- 消息的发送人 -->
<heading>通知</heading> <!-- 消息的标题 -->
<body>晚上开会</body> <!-- 消息的具体内容 -->
</note>
XML和HTML的区别
XML和HTML虽然都是标记语言,但是它们二者没有任何的关系。
HTML被设计用来描述网页上的内容,是网页内容的载体
XML被设计用来传输和存储数据,是数据的载体。
XML的缺点
1、XML格式臃肿,和数据无关的代码多,体积大,传输效率低
2、在Javascript中解析XML比较麻烦
JSON
什么是JSON
概念:JSON,即“javascript对象表示法”。简单来说,JSON就是javascript对象和数组的字符串表示法。他使用文本表示一个JS对象或数组的信息,因此JSON的本质是字符串。
作用:JSON是一种轻量级的文本数据交换格式,在作用上类似于XML,专门用于存储和传输数据,但是JSON比XML更小、更快、更易解析。
现状:JSON已经成为了主流的数据交互格式
JSON的两种结构
对象结构:对象结构在JSON中表示为{ }括起来的内容。数据结构为{ key: value, key: value, …}的键值对结构。其中,可以必须是使用英文的双引号包裹的字符串,value的数据类型可以是数字、字符串、布尔值、null、数组、对象6种类型。
代码练习:
{
"name":"zs",
"age":20,
"gander":"男",
"address":null,
"hobby":["吃饭","睡觉","打代码"]
}
数组结构:数组结构在JSON中表示为[ ]括起来的内容。数据结构为[“java”, “javascript”, 30, true, …]。数组中数据的类型可以是数字、字符串、布尔值、null、数组、对象6种类型。
[ "java", "python", "php" ] //数组里放字符串
[100, 200, 300.5] //数组里放数据
[true, false, null] //数组里放布尔值和null
[{"name":"zs", "age":20}, {"name":"ls", "age":30}] //注意数组里是对象的话,对象里的字符串还是都要用双引号包住
[["苹果", "榴莲", "椰子"], [4, 50, 5]] //数组里放数组
JSON注意事项
1、属性名必须用双引号包裹
2、字符串类型的值必须使用双引号包裹
3、JSON中不允许使用单引号表示字符串,必须用双引号包裹
4、JSON中不能写注释
5、JSON的最外层必须是对象或数组格式
6、不能使用undnefined或函数作为JSON的值,必须是上面规定的那六种值。
JSON的作用:在计算机与网络之间存储和传输数据
JSON的本质:用字符串来表示javascript对象数据或数组数据。
JSON和JS对象的关系
JSON是JS对象的字符串表示法,他使用文本表示一个JS对象的信息,本质是一个字符串。例如:
//这是一个JS对象
var obj = {a:'Hello',b:'world'}
//这是一个JSON字符串,本质是一个字符串
var json = '{"a":"hello","b":"world"}'
JSON和JS对象的互转
要实现从JSON字符串转换为JS对象,使用JSON.parse()方法:
var obj = JSON.parse('{"a":"hello","b":"world"}');
//结果为{a:'Hello',b:'world'}
要实现从JS字符串转换为JSON对象,使用JSON.stringify()方法:
var obj = JSON.stringify(a:'Hello',b:'world');
//结果为'{"a":"hello","b":"world"}'
JSON.parse()的应用场景:
代码练习:
var xhr = new XMLHttpResquest()
xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks')
xhr.send()
xhr.onreadystatechange = function(){
if (xhr.readyState === 4 && xhr.status === 200){
console.log(xhr.responseText)//打印出来发现获取到的数据是一串字符串
console.log(typeof(xhr.responseText))//打印它的数据类型确定就是一个字符串
var result = JSON.parse(xhr.responseText)//将得到的数据通过JSON.parse函数转化为对象
console.log(result) //打印发现result真的是一个对象
}
}
序列化与反序列化
把数据对象转换为字符串的过程,叫做序列化,例如:调用JSON.stringify()函数的操作,叫做JSON序列化。因此JSON.stringify()函数就叫做序列化函数
把字符串转换为数据对象的过程,叫做反序列化,例如:调用JSON.parse()函数的操作,叫做JSON反序列化。因此JSON.parse()函数就叫做序列化函数