整理自《JavaScript 标准参考教程(alpha)》,by 阮一峰
1.JSON 格式
JSON 格式是一种用于数据交换的文本格式。
符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。
每个 JSON 对象,就是一个值。每个 JSON 文档只能包含一个值。
JSON 对值的类型和格式有严格的规定
-
复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
-
简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和
null
(不能使用NaN
,Infinity
,-Infinity
和undefined
)。 -
字符串必须使用双引号表示,不能使用单引号。
-
对象的键名必须放在双引号里面。
-
数组或对象最后一个成员的后面,不能加逗号。
ES5 新增了JSON
对象,用来处理 JSON 格式数据。它有两个方法:JSON.stringify()
和JSON.parse()
。
2.JSON.stringify()
JSON.stringify
方法用于将一个值转为字符串。
该字符串符合 JSON 格式,并且可以被JSON.parse
方法还原。
需要注意的是,对于原始类型的字符串,转换结果会带双引号。
JSON.stringify('foo') === "foo" // false
JSON.stringify('foo') === "\"foo\"" // true
上面代码中,字符串foo
,被转成了""foo""
。
这是因为将来还原的时候,双引号可以让 JavaScript 引擎知道,foo
是一个字符串,而不是一个变量名。
如果原始对象中,有一个成员的值是undefined
、函数或 XML 对象,这个成员会被过滤。
var obj = {
a: undefined,
b: function () {}
};
JSON.stringify(obj) // "{}"
如果数组的成员是undefined
、函数或 XML 对象,则这些值被转成null
。
var arr = [undefined, function () {}];
JSON.stringify(arr) // "[null,null]"
正则对象会被转成空对象。
JSON.stringify(/foo/) // "{}"
JSON.stringify
方法会忽略对象的不可遍历属性。
3.JSON.parse()
JSON.parse
方法用于将JSON字符串转化成对象。
如果传入的字符串不是有效的JSON格式,JSON.parse
方法将报错。