JSON是一种通用数据格式,很多语言都有解析和序列化JSON的内置能力。
JSON语法支持三种类型的值。(对象和数组一般会用做JSON数组的顶级结构,以便创建大型复杂的数据结构)。
- 简单值:字符串,数值,布尔值,null。
- 如下皆为有效的JSON
- 字符串:"javaScript" (必须是双引号,单引号会导致语法错误)
- 数值:5
- true
- null
- 对象:
例:
{"name":"zhangsan","age":16,"school":{"name":"zb","location":"shanxi"}}
- JSON中没有变量
- 最后没有分号(因为不是JavaScript语言)
- key值必须带双引号
- value值可以是对象,数组,字符串,number,布尔,null
- 数组:
例:
["zhangsan",16,{"name":"zb","location":"shanxi"},true]
JSON.stringify()把一个JavaScript对象序列化为一个JSON字符串,默认输出不包含空格和缩进的字符串。因为JSON是语言无关的纯数据规范,因此一些特定于 JavaScript 的对象属性会被
JSON.stringify跳过。
- 可序列化并过滤数据
let person = {
"name":"zhangsan",
"age":16,
"sex":"boy"
}
let jsonPerson1 = JSON.stringify(person,["name","age"]) // 只有name和age的JSON字符串
let jsonPerson2 = JSON.stringify(person,(key,value)=>{
switch(key) {
case "age":
return 18;
case "sex"
return undefined;
default:
return value
}
}) // 更改了部分value的JSON字符串
// 第三个参数控制缩进和空格,①为数值时表示每一级缩进的空格数,最大值为10,超过10 则默认为10.②为字符串时,则会使用该字符串而不是空格来缩进。
let jsonPerson3 = JSON.stringify(person,null,"--")
// {
// --"name":"zhangsan",
// --"age":16,
// --"sex":"boy"
// }
2.toJSON()方法,有时需要在JSON.stringify()之上自定义JSON序列化。此时可以在序列化的对象中添加toJSON()方法,序列化时会基于这个方法返回适当的JSON表示。
JSON.parse()将JSON字符串转换为JavaScript对象 JSON.parse()方法也可以额外接受一个函数作为参数,函数用来处理将字符串转换为JavaScript需要的特殊格式数据,例如可将时间字符串1137075575000转换为时间对象new Date(1137075575000),如果还原函数返回undefined,会删除相应的键。