第 20 章 JSON

第 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值