JSON(JavaScript Object Notation,JavaScript对象标记法)是一种存储和交换数据的语法,经常在数据从服务器发送到网页时使用
JSON的语法是来自JavaScript对象符号的语法,但JSON格式是纯文本,JavaScript程序可以很容易地将JSON数据转换成本地的JavaScript对象
交换数据
当数据在浏览器与服务器之间进行交换时,这些数据只能是文本
JSON属于文本,并且我们能够把任何JavaScript对象转换为JSON,然后将JSON发送到服务器,我们也能把从服务器接收到的任何JSON转换为JavaScript对象,以这样的方式,我们可以把数据作为JavaScript对象来处理,无需复杂的解释和转译
存储数据
JSON让JavaScript对象存储为文本成为可能
JSON数据类型
有效的数据类型
在JSON中,值必须是以下数据类型之一:
- 字符串(必须用双引号包围)
- 数字(必须是整数或浮点数)
- 对象(JSON对象)
- 数组
- 布尔
- null
JSON的值不可以是以下数据类型之一:
-
函数
-
日期(JSON中不允许日期对象,如果需要包含日期,可以写成字符串,之后再用
new Date()
将其转换回日期对象var text = '{ "name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}'; var obj = JSON.parse(text); obj.birth = new Date(obj.birth);
也可以使用
JSON.parse()
函数的第二个参数,被称为reviver,这个reviver参数是函数,在返回值之前,它会检查每个属性var text = '{ "name":"Bill Gates", "birth":"1955-10-28", "city":"Seattle"}'; var obj = JSON.parse(text, function (key, value) { if (key == "birth") { return new Date(value); } else { return value; }});
-
undefined
注意:JSON数据的书写方式是名称/值对,类似于JavaScript对象属性,但是JSON名称需要双引号,而JavaScript对象的名称不需要
JSON解析
JSON的常规用途是从web服务器读取数据,与web服务器进行数据传输;
在从web服务器接收数据时,数据永远是字符串;
把JSON文本转换为JavaScript对象
通过JSON.parse()
解析数据,这些数据会成为JavaScript对象
把JavaScript对象转换为JSON文本
通过JSON.stringify()
可以把JavaScript对象转换成字符串,即JSON文本
注意:在JSON中,函数不能作为对象值,JSON.stringify()
函数将从JavaScript对象删除任何函数,包括键和值:
var obj = { "name":"Bill Gates", "age":function () {return 62;}, "city":"Seattle"};
JSON.stringify(obj); // 返回"{"name":"Bill Gates","city":"Seattle"}"
JSON vs XML
JSON和XML均可用于从web服务器接收数据
JSON实例
{"employees":[
{ "firstName":"Bill", "lastName":"Gates" },
{ "firstName":"Steve", "lastName":"Jobs" },
{ "firstName":"Elon", "lastName":"Musk" }
]}
XML实例
<employees>
<employee>
<firstName>Bill</firstName>
<lastName>Gates</lastName>
</employee>
<employee>
<firstName>Steve</firstName>
<lastName>Jobs</lastName>
</employee>
<employee>
<firstName>Elon</firstName>
<lastName>Musk</lastName>
</employee>
</employees>
JSON类似XML,因为:
-
JSON和XML都是“自描述的”(人类可读的)
-
JSON和XML都是分级的(值中有值)
-
JSON和XML都是被大量编程语言解析和使用
-
JSON和XML都是被XMLHttpRequest读取
JSON与XML的差异在于:
- JSON不使用标签
- JSON更短
- JSON的读写速度更快
- JSON可使用数组
最大的不同之处:
XML必须使用XML解析器进行解析。而JSON可通过标准的JavaScript函数进行解析