JSON是一种轻量级的数据交换格式
JSON.stringIfy()方法
- 作用:将js对象转换成字符串
var book={
title:"Professional JavaScript",
authors:["Nicholas C. Zakas"],
edition:3,
year:2011
}
// JSON.stringify()将普通的对象转换成json格式
console.log(JSON.stringify(book) )//{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}
// Json.parse()将json格式的数据转换成普通对象
JSON.stringify(value,array),value是将要序列化成一个JSON字符串的值,array是数组,数组中的元素与将序列化的对象中属性是对应的,因此在返回的字符串中,就只会包含这两个属性
var book={
title:"Professional JavaScript",
authors:["Nicholas C. Zakas"],
edition:3,
year:2011
}
console.log(JSON.stringify(book,["title","edition"]))//{"title":"Professional JavaScript","edition":3}
JSON.stringify(value,function(key,value)),value是将要序列化成一个JSON字符串的值,function可以接收俩个参数属性名和属性值,根据属性名可以知道应该如何处理要序列化的对象的属性,属性名只能是字符串,而在值并非键值对儿结构的值时,键名可以是空字符串,如果函数返回了undefined,那么相应的属性会被忽略。
var book={
"title":"Professional JavaScript",
"authors":["Nicholas C. Zakas"],
edition:3,
year:2011
}
var jsonText=JSON.stringify(book,function(key,value){
switch(key){
case "authors":
return value.join(",")
case "year":
return 5000
case "edition":
return undefined
default:
return value
}
})
console.log(jsonText)//{"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}
JSON.stringify(value,null,num)num用于控制结果中的缩进和空白符。如果这个参数是一份数值,那他表示的是每个级别缩进的空格数,num的最大值为10,超过10后默认为10
var book2={
"title":"Professional JavaScript",
"authors":["Nicholas C. Zakas"],
edition:3,
year:2011
}
console.log(JSON.stringify(book2,null,10))

toJSON()方法
有时候JSON.stringify()无法满足对某些对象进行自定义序列化要求,在这些情况下,可以给对象定义toJSON方法,返回其自身的JSON数据格式。
var book={
"title":"Professional JavaScript",
"authors":["Nicholas C. Zakas"],
edition:3,
year:2011,
toJSON:function(){
return this.title
}
}
console.log(JSON.stringify(book))//"Professional JavaScript"
把一个对象传入JSON.stringify(),序列化该对象的方法顺序:
- (1)如果存在toJSON()方法而且通过它取得有效的值,则调用该方法,否则,返回对象本身
- (2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值
- (3)对第(2)步返回的每个值进行相应的序列化
- (4)如果提供了第三个参数,执行相应的格式化
JSON.parse()方法
- 作用:将json格式的数据转换成普通对象
var book={
title:"Professional JavaScript",
authors:["Nicholas C. Zakas"],
edition:3,
year:2011
}
// Json.parse()将json格式的数据转换成普通对象
console.log(JSON.parse(JSON.stringify(book)))//{title: "Professional JavaScript", authors: Array(1), edition: 3, year: 2011}
JSON.parse()第二个参数:函数,将在每个键值对儿上调用。为了区别JSON.stringify()接收的替换(过滤)函数,这个函数被称为函数,但实际上这两个函数的签名是相同的--他们都接收两个参数,一个键和一个值,而且都需要返回一个值。如果还原函数返回undefined,则表示要从结果中删除相应的键,如果返回其他值,则将该值插入到结果中。在将日期字符串换为Date对象时,经常会用到还原函数
var book={
"title":"Professional JavaScript",
"authors":["Nicholas C. Zakas"],
edition:3,
year:2011,
releaseDate:new Date(2019,09,15)
}
var jsonText=JSON.stringify(book)
var bookCopy=JSON.parse(jsonText,function(key,value){
if(key=="releaseDate"){
return new Date(value)
}else{
return value
}
})
console.log(bookCopy.releaseDate.getFullYear())//2019