Open Twlig opened 2 years ago
JSON 是一种数据格式,而不是编程语言。
JSON 语法支持表示 3 种类型的值。
简单值:字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。特殊值 undefined 不可以。
下面这个字符串也是有效的 JSON:
"Hello world!"
对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。
{ //json "name": "Nicholas", "age": 29 } let person = { //javascript name: "Nicholas", age: 29 };
区别:
数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。
[25, "hi", true]
复杂的JSON例子:
[ { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas", "Matt Frisbie" ], "edition": 4, "year": 2017 }, { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], "edition": 3, "year": 2011 }, { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], "edition": 2, "year": 2009 } ]
假设把前面的数据结构保存在了变量 books 中,获取第三本书的书名:
books[2].title
ECMAScript 5 增加了 JSON全局对象,正式引入解析 JSON 的能力。JSON 对象有两个方法:stringify()和 parse()。这两个方法分别可以将JavaScript 序列化为 JSON 字符串,以及将 JSON 解析为原生 JavaScript 值。
JSON.stringify()
JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串。JSON.stringify()接收三个参数,后两个不是必须的。
参数一:JavaScript 对象
let book = { title: "Professional JavaScript", authors: [ "Nicholas C. Zakas", "Matt Frisbie" ], edition: 4, year: 2017 }; let jsonText = JSON.stringify(book); //{"title":"Professional JavaScript","authors":["Nicholas C. Zakas","Matt Frisbie"], //"edition":4,"year":2017}
参数二:数组或函数
属性。
let jsonText = JSON.stringify(book, ["title", "edition"]);
值(value)。
let jsonText = JSON.stringify(book, (key, value) => { switch(key) { case "authors": return value.join(",") case "year": return 5000; case "edition": return undefined; default: return value; } }); //{"title":"Professional JavaScript","authors":"Nicholas C. Zakas,Matt //Frisbie","year":5000}
注意:
键是"edition",则返回 undefined 忽略该属性。 最后一定要提供默认返回值,以便返回其他属性传入的值。
键是"edition",则返回 undefined 忽略该属性。
最后一定要提供默认返回值,以便返回其他属性传入的值。
参数三:缩进结果JSON字符串
JSON.stringify()方法的第三个参数控制缩进和空格。在这个参数是数值时,表示每一级缩进的空格数。
let jsonText = JSON.stringify(book, null, 4); /*{ "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas", "Matt Frisbie" ], "edition": 4, "year": 2017 }*/
✨在序列化 JavaScript 对象时:
JSON.parse()
把JSON字符串转为JavaScript对象,接收两个参数。
参数一:JSON字符串
参数二:还原函数
如果还原函数返回 undefined,则结果中就会删除相应的键。如果返回了其他任何值,则该值就
会成为相应键的值插入到结果中。
let book = { title: "Professional JavaScript", authors: [ "Nicholas C. Zakas", "Matt Frisbie" ], edition: 4, year: 2017, releaseDate: new Date(2017, 11, 1) }; let jsonText = JSON.stringify(book); let bookCopy = JSON.parse(jsonText, (key, value) => key == "releaseDate" ? new Date(value) : value);
JSON 是一种数据格式,而不是编程语言。
JSON语法
JSON 语法支持表示 3 种类型的值。
简单值:字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。特殊值 undefined 不可以。
下面这个字符串也是有效的 JSON:
对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。
区别:
数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。
复杂的JSON例子:
假设把前面的数据结构保存在了变量 books 中,获取第三本书的书名:
解析与序列化
ECMAScript 5 增加了 JSON全局对象,正式引入解析 JSON 的能力。JSON 对象有两个方法:stringify()和 parse()。这两个方法分别可以将JavaScript 序列化为 JSON 字符串,以及将 JSON 解析为原生 JavaScript 值。
JSON.stringify()
JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串。JSON.stringify()接收三个参数,后两个不是必须的。
参数一:JavaScript 对象
参数二:数组或函数
属性。
值(value)。
注意:
参数三:缩进结果JSON字符串
JSON.stringify()方法的第三个参数控制缩进和空格。在这个参数是数值时,表示每一级缩进的空格数。
✨在序列化 JavaScript 对象时:
JSON.parse()
把JSON字符串转为JavaScript对象,接收两个参数。
参数一:JSON字符串
参数二:还原函数
如果还原函数返回 undefined,则结果中就会删除相应的键。如果返回了其他任何值,则该值就
会成为相应键的值插入到结果中。