1.基本語法
json的語法可以表示爲三種類型的值
1.簡單值:適用於js相同的語法,可以在json中表示字符串、數值、布爾值和null,但是不支持undefined。
- json字符串與js字符串最大的不同是在json中字符串
2.對象:表示一組無序的鍵值對。
{
"name":"lucy",
"age":"22"
}
與js中的字面量不同,json中的對象不需要聲明(json中沒有變量的概念),其次,沒有末尾的分號。
3.數組:表示一組有組的值的列表。
["hi",25,"js"]
把數組和對象結合起來,就能構成更復雜的數據集合。
2.序列化JSON
stringify方法,主要用於把JavaScript對象序列化爲json字符串。
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
}
var jsonText = JSON.stringify(book);
console.log(jsonText);
/*運行結果,不包含任何空格或縮進*/
//{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}
該方法還可以接受參數,兩個參數用於以不同的方式序列化JavaScript對象。第一個參數是一個過濾器,可以是數組,也可以是函數。第二個參數是一個選項,用來表示是否在JSON對象中保留縮進。
1、過濾器參數爲數組。
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
}
var jsonText = JSON.stringify(book,["title","edition"]);
/*運行結果,只包括數組中的項*/
//{"title":"Professional JavaScript","edition":3}
2.過濾器參數爲函數。
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
}
var jsonText = JSON.stringify(book, function (key,value) {
///如果返回的值爲undefined,則相應的屬性會被忽略掉
switch(key){
case "authors":
return value.join(',');
case "edition":
return undefined;
case "year":
return 5000;
default : //如果不設置default的值,其他的屬性有可能會被忽略掉
return value;
}
});
console.log(jsonText);
//{"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}
3.字符串縮進
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
}
var jsonText = JSON.stringify(book, null, 4);
console.log(jsonText);
// {
// "title": "Professional JavaScript",
// "authors": [
// "Nicholas C. Zakas"
// ],
// "edition": 3,
// "year": 2011
// }
4.toJSON()方法:
可以爲任何對象添加toJSON方法。可以作爲過濾器的補充。
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011,
toJSON: function () {
return this.title;
}
}
var jsonText = JSON.stringify(book);
console.log(jsonText);//"Professional JavaScript"
序列化的內部順序:
1,如果存在toJSON()方法並且能通過他取得有效的值,則調用該方法。否則,返回對象本身。
2.如果存在第二個參數,應用過濾器,傳入過濾器的值應該爲第一步得到的值。
3.對第二部得到的結果進行序列化。
4.如果提供了第三個參數,執行相應的序列化。
3.解析JSON
JSON.parse()方法:將JSON字符串解析爲原生的javaScript值。也可以接受一個參數,這個參數是一個函數,可以在每一對鍵值對上進行調用。
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011,
relaseDate:new Date(2016,11,11)
}
var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText, function (key,value) {
if(key == 'relaseDate'){
return new Date(value);
}else{
return value;
}
});
console.log(bookCopy);
運行結果::