JSON
我们刚刚讨论了对象和数组字面量,你应该很熟悉了,现在我们来看一看JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可以很容易地用在多种语言中,尤其是在JavaScript中。
JSON格式及其简单,它只是数组和对象字面量的混合写法,看一个JSON字符串的例子:
{"name": "value", "some": [1, 2, 3]}
JSON和对象字面量在语法上的唯一区别是,合法的JSON属性名均需要用引号包含。而在对象字面量中,只有属性名是非法的标识符时才使用引号包含,比如,属性名中包含空格{"first name": "Dave"}
。
在JSON字符串中,不能使用函数和正则表达式字面量。
使用JSON
在前面的章节中讲到,出于安全考虑,不推荐使用eval()
来粗暴地解析JSON字符串。最好是使用JSON.parse()
方法,ES5中已经包含了这个方法,并且现代浏览器的JavaScript引擎中也已经内置支持JSON了。对于老旧的JavaScript引擎来说,你可以使用JSON.org所提供的JS文件(http://www.json.org/json2.js)来获得JSON对象和方法。
// 输入JSON字符串
var jstr = '{"mykey": "my value"}';
// 反模式
var data = eval('(' + jstr + ')');
// 更好的方式
var data = JSON.parse(jstr);
console.log(data.mykey); // "my value"
如果你已经在使用某个JavaScript库了,很可能这个库中已经提供了解析JSON的方法,就不必再额外引入JSON.org的库了,比如,如果你已经使用了YUI3,你可以这样:
// 输入JSON字符串
var jstr = '{"mykey": "my value"}';
// 使用YUI来解析并将结果返回为一个对象
YUI().use('json-parse', function (Y) {
var data = Y.JSON.parse(jstr);
console.log(data.mykey); // "my value"
});
如果你使用的是jQuery,可以直接使用它提供的parseJSON()
方法:
// 输入JSON字符串
var jstr = '{"mykey": "my value"}';
var data = jQuery.parseJSON(jstr);
console.log(data.mykey); // "my value"
和JSON.parse()
方法相对应的是JSON.stringify()
。它将对象或数组(或任何原始值)转换为JSON字符串。
var dog = {
name: "Fido",
dob:new Date(),
legs:[1,2,3,4]
};
var jsonstr = JSON.stringify(dog);
// jsonstr的值为
// {"name":"Fido","dob":"2010-04-11T22:36:22.436Z","legs":[1,2,3,4]}