JSON

我们刚刚讨论了对象和数组字面量,你应该很熟悉了,现在我们来看一看JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可以很容易地用在多种语言中,尤其是在JavaScript中。

JSON格式及其简单,它只是数组和对象字面量的混合写法,看一个JSON字符串的例子:

  1. {"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对象和方法。

  1. // 输入JSON字符串
  2. var jstr = '{"mykey": "my value"}';
  3. // 反模式
  4. var data = eval('(' + jstr + ')');
  5. // 更好的方式
  6. var data = JSON.parse(jstr);
  7. console.log(data.mykey); // "my value"

如果你已经在使用某个JavaScript库了,很可能这个库中已经提供了解析JSON的方法,就不必再额外引入JSON.org的库了,比如,如果你已经使用了YUI3,你可以这样:

  1. // 输入JSON字符串
  2. var jstr = '{"mykey": "my value"}';
  3. // 使用YUI来解析并将结果返回为一个对象
  4. YUI().use('json-parse', function (Y) {
  5. var data = Y.JSON.parse(jstr);
  6. console.log(data.mykey); // "my value"
  7. });

如果你使用的是jQuery,可以直接使用它提供的parseJSON()方法:

  1. // 输入JSON字符串
  2. var jstr = '{"mykey": "my value"}';
  3. var data = jQuery.parseJSON(jstr);
  4. console.log(data.mykey); // "my value"

JSON.parse()方法相对应的是JSON.stringify()。它将对象或数组(或任何原始值)转换为JSON字符串。

  1. var dog = {
  2. name: "Fido",
  3. dob:new Date(),
  4. legs:[1,2,3,4]
  5. };
  6. var jsonstr = JSON.stringify(dog);
  7. // jsonstr的值为
  8. // {"name":"Fido","dob":"2010-04-11T22:36:22.436Z","legs":[1,2,3,4]}