1.json是一种数据格式,而不是编程语言.不从属与JavaScript,很多编程语言都有针对json的解析器和序列化器
2.语法:可以表示以下三种类型的值
简单值:字符串,数字,布尔,null,不支持undefined(与JavaScript最大的区别在于,json字符串必须使用双引号,单引号会导致语法错误)
对象:表示一组无序的键值对(属性名也要加双引号,没有变量的声明)
数组:一组有序值的列表
不支持变量,函数,对象的实例
3.SJON对象的两种方法:
stringify() 把JavaScript对象转换成json字符串
parse() 把json字符串解析成原生JavaScript值
4.stringify()
stringify()接收三个参数,第一个参数是要解析的对象,第二个是过滤器,第三个是保留缩进
第二个参数可以是一个数组,也可以是一个函数,函数的话接收两个参数:属性名和属性值.注意:如果函数的返回值是undefined,那么该属性会被删除.
let person = {
name: 'zhangsan',
sex: "男",
age: 20
}
let personText = JSON.stringify(person, ['name', 'age'], 4);
结果:{
"name": "zhangsan",
"age": 20
}
let person = {
name: 'zhangsan',
sex: "男",
age: 20
}
let personText = JSON.stringify(person, ['name', 'age'], 4);
let personText2 = JSON.stringify(person, function(key, value) {
switch (key) {
case 'name':
return 'lisi'
case 'sex':
return undefined
default:
return value
}
});
结果:{"name":"lisi","age":20}
tojson()方法可以作为过滤器的一个补充(能够将Data对象自动转换成ISO 8601日期字符串).序列化的内部顺序:
(1)如果存在toJSON方法,并且通过他可以取得有效的值,那么就调用这个方法,否则,返回对象本身
(2)如果定义了第二个参数,那么就应用这个过滤器,出入过滤器的值是第一步返回的值
(3)对第二步的每个值进行序列化
(4)如果定义了第三个参数,进行响应的格式化
5.parse()
parse方法也可以接收第二个参数(还原函数),可以将日期字符串转换成Data对象
let person = {
name: 'zhangsan',
releaseData: new Date(2011, 11, 1)
}
let personText = JSON.stringify(person);
let personCopy = JSON.parse(personText, function(key, value) {
if (key === 'releaseData') {
return new Date(value);
} else {
return value
}
})
console.log(personCopy.releaseData);
console.log(personCopy.releaseData.getFullYear());
结果:Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间)
test.html:28 2011
总结:json是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量.json可以表示对象,数组,数值,字符串,布尔值,null,虽然xml也可以表示,但是json比xml要简单的多