1 什么是JSON?
JSON:JavaScript Object Notation,JavaScript 对象表示法,它是一种数据格式,可以用来表示JavaScript数据。
2 为什么需要JSON?如果没有JSON又会怎么样?
曾经有一段时间,XML 是互联网上传输结构化数据的事实标准。但不少人认为 XML 过于烦琐、冗长。
于是2006 年,Douglas Crockford 把 JSON作为 IETF RFC 4627 提交给 IETF。
Crockford认为与 XML 相比,JSON是在 JavaScript中读写结构化数据的更好的方式。因为可以把 JSON 直接传给 eval(),而且不必创建 DOM 对象。
也就是说,JSON比XML更方便。
3 JSON怎么表示JavaScript中的字符串?
"Hello world!"
JavaScript 字符串与 JSON 字符串的最大区别在于,JSON 字符串必须使用双引号(单引号会导致语法错误)。
4 JSON怎么表示JavaScript中的对象?
下面是JavaScript的表示:
var person = {
name: "Nicholas",
age: 29
};
下面是JSON的表示:
{ "name": "Nicholas", "age": 29 }
与 JavaScript 的对象字面量相比, JSON 对象有两个地方不一样。
首先,没有声明变量(JSON 中没有变量的概念)。
其次,没有末尾的分号(因为这不是 JavaScript 语句,所以不需要分号)。
再说一遍,对象的属性必须加双引号,这在 JSON 中是必需的。
5 JSON怎么表示JavaScript中的数组?
下面是 JavaScript 中的表示:
var values = [25, "hi", true];
下面是 JSON中的表示:
[25, "hi", true]
6 如何将JavaScript转换成JSON?
ECMAScript 5 对解析 JSON 的行为进行规范,定义了全局对象 JSON。
用stringify():
var book = { title: "Professional JavaScript", edition: 3, year: 2011 }; var jsonText = JSON.stringify(book); console.log(jsonText);
这个例子使用 JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串,然后将它保存在变量 jsonText 中。
7 如何将JSON转换成JavaScript?
var bookCopy = JSON.parse(jsonText);
将 JSON 字符串直接传递给 JSON.parse()就可以得到相应的 JavaScript 值。
注意,虽然 book 与 bookCopy 具有相同的属性,但它们是两个独立的、没有任何关系的对象。
8 如何过滤结果?比如题6中的例子,我只需要title和year,如何做?
var jsonText = JSON.stringify(book, ["title", "year"]);
JSON.stringify()的第二个参数是一个数组,其中包含两个字符串: "title"和"year"。
这两个属性与将要序列化的对象中的属性是对应的,因此在返回的结果字符串中,就只会包含这两个属性:
{"title":"Professional JavaScript","year":2011}
另外,第二个参数也可以是一个过滤函数,如下:
var jsonText = JSON.stringify(book, function(key, value){ switch(key){ case "year": return 2017; case "edition": return undefined; default: return value; } });
结果是:
{"title":"Professional JavaScript","year":2017}
9 stringify()方法有几个参数,各自有什么用途?
有三个参数,第一个为必填,其余两个为选填,第二个参数为过滤数组或函数,第三个参数控制字符串缩进。
var jsonText = JSON.stringify(book, null, 4);
结果为:
{ "title": "Professional JavaScript", "edition": 3, "year": 2011 }
注:本文总结选自《JavaScript高级程序设计》第三版。