JSON浅谈

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高级程序设计》第三版。

原文地址:https://www.cnblogs.com/lijy/p/6509289.html