JSON是JavaScript对象简谱标准
JSON是JS的严格子集,用JavaScript中的几种模式来表示结构化数据
JSON是一种数据格式
23.1 语法
JSON支持表示三种类型的值:
简单值: 字符串,数值,布尔值,null
对象: 表示为有序键值对
数组: 可以通过索引表示值的有序列表
23.1.1 简单值
JSON必须用双引号
"Hello World"
23.1.2 对象
JSON中对象的属性名要用双引号包裹,而且没有变量声明
{
"name": "zs",
"age": 29
}
23.1.3 数组
JSON的数组和JS的数组表达形式一样
23.2 解析和序列化
JSON可以直接被解析为可用的JS对象
23.2.1 JSON对象
stringify() 吧JS序列化为JSON字符串
parse() 吧JSON解析为原生JS值
23.2.2 序列化选项
如果stringify()的第二个参数是个数组,那么只会序列化数组中的属性
let p = {
"name": "zs",
"age": 29
}
JSON.stringify(p,["name"])
第二个参数也可以是个函数,接收key和value属性(称为过滤函数)
JSON.stringify(p,(key,value)=>{
if(key = "name") return 1
else return 0
})
第三个参数控制缩进和空格
JSON.stringify(p,null,4)
有时候需要自定义JSON序列化,使用toJSON()方法
let book = {
title: "book",
author: [
"NC",
"MT"
],
edition: 4,
toJSON: function(){
return this.title
}
}
console.log(JSON.stringify(book)); //"book"
toJSON方法可以和过滤参数一起使用
23.2.3 解析选项
JSON.parse() 也可以接收一个额外的参数,这个参数是一个函数,会根据每一个键值对都调用一次
称为还原函数
如果还原函数返回undefined,结果中就会删除相应的键
let book = {
title: "book",
author: [
"NC",
"MT"
],
edition: 4,
releaseDate: new Date(2017,11,1)
}
let jsonText = JSON.stringify(book)
let bookCopy = JSON.parse(jsonText,(key,value)=> key === "releaseDate" ? new Date(value) : value)
console.log(bookCopy.releaseDate.getFullYear());// 2017