【红宝书】第20章.JSON
JSON是一种轻量级的数据格式。JSON使用JS语法的子集表示对象、数组、字符串、数值、布尔值和null,不支持undefined
JSON.stringify()
// JSON.stringify(arg1,arg2,arg3)
// 第一个参数为要序列化的对象
// 第二个参数为过滤器,可以是数据或者方法,非必填
// 第三个参数为是否在JSON字符串中保留缩进,若是数值表示的是每个级别缩进的空格数,非必填
let book={
title:"九州缥缈录",
author:"江南",
year:2015,
chapter:['蛮荒','苍云古齿','天下名将','辰月之征','一生之盟','豹魂']
}
let jsonText1 = JSON.stringify(book,['title','author'])
console.log(jsonText1)
let jsonText2 = JSON.stringify(book,function(key,value){
switch(key){
case 'year':
return 2018
case 'author':
return '南大'
default:
return value
}
})
console.log(jsonText2)
// 主要传入有效的控制缩进的参数值,结果字符串就会包含换行符
let jsonText3 = JSON.stringify(book,null,4)
console.log(jsonText3)

toJSON()方法
let book1={
title:"九州缥缈录",
author:"江南",
year:2015,
chapter:['蛮荒','苍云古齿','天下名将','辰月之征','一生之盟','豹魂'],
toJSON:function(){
return {
title:this.title,
author:this.author
}
}
}
let jsonText4=JSON.stringify(book1,['title'],2)
console.log(jsonText4)

toJSON()可以作为函数过滤器的补充。假设把一个对象传入JSON.stringify(),序列化对象顺序如下:
- 如果存在toJSON()方法而且能通过它取得有效的值,则调用改方法,否则返回对象本身
- 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第1步返回的值
- 对第2步返回的每个值进行相应的序列化
- 如果提供了第三个参数,执行相应的格式化
JSON.parse()
let obj = JSON.parse(jsonText,function(key,value){
})

浙公网安备 33010602011771号