json是一種數(shù)據(jù)格式闸翅,不是一種編程語言月褥。
json是一種輕量級的數(shù)據(jù)格式等浊,可以簡化表示復(fù)雜數(shù)據(jù)結(jié)構(gòu)的工作量。
1抄谐、語法
①json字符串必須使用雙引號
②沒有聲明變量
③沒有末尾分號
④json對象中的屬性名必須加雙引號
json的語法可以表示三種類型的值
簡單值:使用與js相同的語法渺鹦,可以在json中表示字符串、數(shù)值蛹含、布爾值和null毅厚。(不支持undefined)
"hello world"
對象:
{
"name":"Ewall",
"age":21
}
數(shù)組:
[25,"ewall",true]
2、JSON對象
兩個方法:stringfy( ):把js對象序列化為json字符串
??????????????????parse( ):把json字符串解析為原生js值
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017
};
var jsonText=JSON.stringify(person);
console.log(jsonText);
3浦箱、JSON.stringfy( )的具體用法
該方法可以傳入三個參數(shù)吸耿,第一個參數(shù)是要序列化的對象祠锣;第二個是個過濾器(可以是數(shù)組或者是函數(shù));第三個是一個選項(xiàng)咽安,表示是否在JSON字符串中保留縮進(jìn)伴网。
①當(dāng)過濾器是數(shù)組,那么該方法返回的結(jié)果將只包含數(shù)組中列出的屬性
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017
};
var jsonText=JSON.stringify(person,["name","year"]);
console.log(jsonText); //{"name":"Ewall","year":2017}
②當(dāng)過濾器是函數(shù)妆棒。傳入的函數(shù)接收兩個參數(shù)澡腾,屬性名和屬性值,根據(jù)屬性名可以知道應(yīng)該如何處理要序列化的對象中的屬性糕珊。
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017
};
var jsonText=JSON.stringify(person,function(key,value){
switch(key){
case "friends":
return value.join(",");
case "year":
return undefined; //通過返回undefined刪除該屬性
default:
return value;
}
});
console.log(jsonText); //{"name":"Ewall","friends":"joe,frank","edition":3}
4动分、JSON.parse( )方法的具體用法
接收兩參數(shù):第一個參數(shù)是要序列化的對象;第二個參數(shù)是個還原函數(shù)放接。
在將日期字符串轉(zhuǎn)換為Date對象是刺啦,經(jīng)常要用到還原函數(shù)留特。
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017,
releaseDate:new Date()
};
var jsonText=JSON.stringify(person);
console.log(jsonText);
var bookCopy=JSON.parse(jsonText,function(key,value){
if(key=="releaseDate"){
return new Date(value); //基于相應(yīng)的json值創(chuàng)建一個新的Date對象
}else{
return value;
}
});
console.log(bookCopy.releaseDate);