第 20 章 JSON
第一代 Web 服务很大程度上 是以 XML 为基础的,以服务器间通信为主要特征。
Date 类型将日期 保存为自协调世界时(UTC,Universal Time Coordinated)时间 1970 年 1 月 1 日午夜(零时)至今所 经过的毫秒数。
理解 JSON 最关键的一点是一种数据格式,而不是编程语言。它是一种通用数据格式。很多语 言都有解析和序列化 JSON 的内置能力
支持
简单值
字符串、数值、布尔值和 null 可以在 JSON 中出现, undefined 不可以。
语法
对象
与js相比
let person = {
name: "Nicholas",
age: 29
};
JSON 表示相同的对象的语法是:
{
"name": "Nicholas",
"age": 29
}
没有变量声明(JSON 中没有变量)。最后没有分号
数组
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas",
"Matt Frisbie"
],
"edition": 4,
"year": 2017
},
JSON 可以直接被解析 成可用的 JavaScript 对象。
JSON 对象有两个方法:stringify()可以将 JavaScript 序列化为 JSON 字符串
和 parse()及将 JSON 解析为原生 JavaScript 值
let book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"Matt Frisbie"
],
edition: 4,
year: 2017
};
let jsonText = JSON.stringify(book);
JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串,保存在变量 jsonText 中。jsonText 的值是这样的:
{"title":"Professional JavaScript","authors":["Nicholas C. Zakas","Matt Frisbie"],
"edition":4,"year":2017}
JSON 字符串可以直接传给 JSON.parse(),然后得到相应的 JavaScript 值。比如,可以使用以下 代码创建与 book 对象类似的新对象:
let bookCopy = JSON.parse(jsonText);
JSON.stringify()方法还可以接收两个参数
第一个参数是过滤器,可以是数组或函数;第二个参数是用 于缩进结果 JSON 字符串的选项。
let book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"Matt Frisbie"
],
edition: 4,
year: 2017
};
let jsonText = JSON.stringify(book, ["title", "edition"]);
第二个参数是一个包含两个字符串的数组:“title” 和"edition"。它们对应着要序列化的对象中的属性,因此结果 JSON 字符串中只会包含这两个属性:
{"title":"Professional JavaScript","edition":4} :
第三个参数控制缩进和空格
每级缩进 4 个空格
let book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"Matt Frisbie"
],
edition: 4,
year: 2017
};
let jsonText = JSON.stringify(book, null, 4);
这样得到的 jsonText 格式如下:
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas",
"Matt Frisbie"
],
"edition": 4,
"year": 2017
}
toJSON()方法
可以在要序列化的对象 中添加 toJSON()方法,序列化时会基于这个方法返回适当的 JSON 表示。
let book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas",
"Matt Frisbie"
],
edition: 4,
year: 2017,
toJSON: function() {
return this.title;
}
};
let jsonText = JSON.stringify(book);