JSON 对象

JSON(JavaScript Object Notation),是道格拉斯·克罗克福特(Douglas Crockford)于 2001 年发明的一种轻量级数据存储格式。易于阅读和编写,同时也易于解析和生成。

JSON 作为 JavaScript 的一个内置对象,同时 ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua 等一系列的语言都提供支持。JSON 成为一个完全独立于语言的文本格式,因此成为数据交换的理想格式。

XML

在 JSON 出现之前,大家一直用 XML 来传递数据。因为 XML 是一种纯文本格式,所以它适合在网络上交换数据。

1
2
3
<name>ZhangSan</name>
<age>20</age>
<gender>male</gender>

XML 本身不算太复杂,但是,加上 DTD、XSD、XPath、XSLT 等一大堆复杂的规范以后,任何正常的软件开发人员碰到 XML 都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚 XML 的规范。

JSON 语法

JSON 作为 JavaScript 的一个子集,它所支持的数据类型也与 JavaScript 中数据类型基本一致:

  • number:和 JavaScript 的 number 完全一致;
  • boolean:和 JavaScript 的 boolean 完全一致;
  • string:和 JavaScript 的 string 类似;
  • null:和 JavaScript 的 null 完全一致;
  • array:和 JavaScript 的数组表示方式[]完全一致;
  • object:和 JavaScript 的对象表示方式{}类似;

为了保证各种语言的统一解析,JSON 规定字符串必须用双引号"",对象的键也必须用双引号""

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
{
"name": "ZhangSan",
"age": 20,
"friends": ["HanMeiMei", "LiZiMing"],
"isMarried": false,
"spouse": null
},
{
"name": "HanMeiMei",
"age": 30,
"friends": ["ZhangSan"],
"isMarried": true,
"spouse": "LiZiMing"
}
]

JSON 与 JavaScript 对象

JSON 中的[]与 JavaScript 中的数组对象、JSON 中的{}与 JavaScript 中的 JSON 式对象,他们并不是同一个东西。

JSON 是 JavaScript 中对象的字符串表示方式,本质上是 string,而 JavaScript 中的数组和 JSON 式对象,本质上是 object。

JSON 与 JavaScript 对象互转

JSON 作为一种数据存储格式变得日益流行。从 ES5 开始,就开始出现全局的 JSON 对象,该对象提供了两种方法,可以将 JSON 字符串和 JavaScript 对象进行相互转换。

stringify()

JSON 对象的stringify()方法用于将 JavaScript 对象转换为 JSON 字符串。

1
2
let data = [{ name: 'HanMeiMei', age: 20 }];
let JSONData = JSON.stringify(data);

parse()

JSON 对象的parse()方法用于将 JSON 字符串转换为 JavaScript 对象。

1
2
let JSONData = '[{ "name": "HanMeiMei", "age": 20 }]';
let data = JSON.parse(JSONData);
我 秦始皇 打钱