json

json是一種輕量級(jí)的數(shù)據(jù)格式焚刚,它不是編程語言濒蒋,更不從屬于JavaScriopt惕味。

json用法

1.與JavaScriopt不同的是楼誓,json字符串必須使用雙引號(hào),否則會(huì)報(bào)錯(cuò)名挥;
2.json的對(duì)象中的屬性需要用引號(hào)包裹疟羹;
3.json不需要聲明變量,因?yàn)閖son并不支持變量;
4.json的對(duì)象中阁猜,鍵值對(duì)與鍵值對(duì)之間用逗號(hào)分隔丸逸,而不是分號(hào)。

數(shù)據(jù)類型

json可支持三種數(shù)據(jù)類型:

  • 簡單值:字符串類型剃袍、數(shù)字類型黄刚、布爾值、null民效;
  • 數(shù)組:數(shù)組可以通過值的索引來訪問值憔维。數(shù)組的值可以是任意類型(簡單值、數(shù)組或?qū)ο?畏邢;
  • 對(duì)象:對(duì)象由鍵值對(duì)構(gòu)成业扒,每個(gè)鍵值對(duì)的值可以是任意類型(簡單值、數(shù)組或?qū)ο?舒萎。
    注:json不支持undefined程储、變量、函數(shù)或?qū)ο髮?shí)例

序列化與解析

json對(duì)象有兩個(gè)方法:stringify ( )與parse ( ) 臂寝。stringify ( )用于將js對(duì)象序列化為json字符串章鲤,而parse ( ) 用于將json字符串解析為js值
舉個(gè)例子:

var book = {
    title : "Professional JavaScriopt",
    authors : ["Nicholas C. Zakas"],
    edition : 3,
    year : 2011
};<!--js對(duì)象-->
var jsonText = JSON.stringify (book);
<!--jsonText中保存的字符串是
{ "title" : "Professional JavaScriopt" , "authors" : ["Nicholas C. Zakas"] , "edition" : 3 , "year" : 2011}-->
var bookCopy = JSON.parse (jsonText);

上例中咆贬,雖然book與bookCopy 具有相同的值败徊,但它們兩個(gè)是彼此獨(dú)立的對(duì)象。

JSON.stringify ( )

JSON.stringify ( )方法可接收三個(gè)參數(shù):

  • 需要序列化的js對(duì)象掏缎;
  • 過濾器皱蹦,可以是數(shù)組或函數(shù);
  • 用于序列化為json字符串時(shí)的縮進(jìn)(默認(rèn)情況下眷蜈,JSON.stringify ( )輸出的字符串不包括任何空字符串或縮進(jìn) )沪哺。

第二個(gè)參數(shù)為數(shù)組

舉個(gè)例子:

var book = {
    title : "Professional JavaScriopt",
    aurhors : ["Nicholas C. Zakas"],
    edition : 3,
    year : 2011
};<!--js對(duì)象-->
var jsonText = JSON.stringify (book , ["authors" , "year"]);
<!--jsonText中保存的字符串是
{  "authors" : ["Nicholas C. Zakas"] , "year" : 2011}-->

第二個(gè)參數(shù)為函數(shù)

當(dāng)stringify ( )方法的第二個(gè)參數(shù)傳入的是一個(gè)函數(shù)時(shí),該函數(shù)會(huì)接收兩個(gè)參數(shù):屬性名(鍵名)酌儒、屬性值凤粗,并返回一個(gè)值。
注:若某個(gè)鍵值對(duì)的值是undefined今豆,則該屬性將會(huì)被忽略嫌拣,不會(huì)被序列化。
舉個(gè)栗子:

var book = {
    title : "Professional JavaScriopt",
    aurhors : ["Nicholas C. Zakas"],
    edition : 3,
    year : 2011
};<!--js對(duì)象-->
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;
    }
});
<!--jsonText 保存的json字符串為:
{ "title" : "Professional JavaScriopt" , "authors" : ["Nicholas C. Zakas"] ,  "year" : 2011}-->

第三個(gè)參數(shù)

該參數(shù)用于控制json字符串中的縮進(jìn)和空白符呆躲。

  • 若參數(shù)是一個(gè)小于等于10的數(shù)字(最大縮進(jìn)空格數(shù)為10异逐,大于10的值將會(huì)被自動(dòng)轉(zhuǎn)換為10),則表示每級(jí)縮進(jìn)的空格數(shù)插掂;
  • 若參數(shù)是一個(gè)字符串灰瞻、制表符等的非數(shù)值腥例,則該字符串、制表符等將被用作縮進(jìn)符酝润,同樣燎竖,字符串等不能超過10個(gè)字符。

toJSON ( )方法

舉個(gè)栗子:

var book = {
            title : "Professional JavaScriopt",
            aurhors : ["Nicholas C. Zakas"],
            edition : 3,
            year : 2011,
            toJSON:function(){
                return this.title;
            }
}; 
var jsonText = JSON.stringify (book);
<!--jsonText保存的字符串為:
"Professional JavaScriopt"-->

序列化的順序

當(dāng)把一個(gè)js對(duì)象傳入JSON.stringify ( )時(shí)要销,序列化該對(duì)象的順序則是:
1.若存在toJSON ( )方法且能取得有效值构回,則調(diào)用該方法。否則疏咐,返回對(duì)象本身纤掸;例如:

var book = {
    title : "Professional JavaScriopt",
    authors : ["Nicholas C. Zakas"],
    edition : 3,
    year : 2011
};<!--js對(duì)象-->
var jsonText = JSON.stringify (book);
<!--當(dāng)js對(duì)象中并不存在toJSON ( )方法或無法取得有效值(值為undefined等情況)時(shí),這一步返回的就是book對(duì)象-->

2.如果提供了第二個(gè)參數(shù)浑塞,則應(yīng)用該過濾器借跪。注:傳入過濾器的值是第1步返回的值

3.對(duì)第2步返回的每個(gè)值進(jìn)行相應(yīng)的序列化。
4.如果提供了第三個(gè)參數(shù)酌壕,則執(zhí)行掏愁。

JSON.parse ( )

JSON.parse ( )可以接收兩個(gè)參數(shù):

  • 需要解析的json字符串;
  • 還原函數(shù)卵牍;
    還原函數(shù)同過濾函數(shù)一樣果港,可以接收兩個(gè)參數(shù):key、value辽慕,并返回一個(gè)值。若返回的是undefined赦肃,則表示要從結(jié)果中刪除相對(duì)應(yīng)的鍵溅蛉。
    舉個(gè)栗子:
var book = {
    title : "Professional JavaScriopt",
    authors : ["Nicholas C. Zakas"],
    edition : 3,
    year : 2011,
    releaseDate : new Date(2018,12,12)
};
var jsonText = JSON.stringify (book);
var bookCopy=JSON.parse(jsonText,function(key,value){
    if(key=="releaseDate"){
        return new Date(value);
    }else{
        return value;
    }
});
alert(bookCopy.releaseDate.getFullYear());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末他宛,一起剝皮案震驚了整個(gè)濱河市船侧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厅各,老刑警劉巖镜撩,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異队塘,居然都是意外死亡袁梗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門憔古,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遮怜,“玉大人,你說我怎么就攤上這事鸿市【饬海” “怎么了即碗?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陌凳。 經(jīng)常有香客問我剥懒,道長,這世上最難降的妖魔是什么合敦? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任初橘,我火速辦了婚禮,結(jié)果婚禮上蛤肌,老公的妹妹穿的比我還像新娘壁却。我一直安慰自己,他們只是感情好裸准,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布展东。 她就那樣靜靜地躺著,像睡著了一般炒俱。 火紅的嫁衣襯著肌膚如雪盐肃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天权悟,我揣著相機(jī)與錄音砸王,去河邊找鬼。 笑死峦阁,一個(gè)胖子當(dāng)著我的面吹牛谦铃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播榔昔,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驹闰,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了撒会?” 一聲冷哼從身側(cè)響起嘹朗,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诵肛,沒想到半個(gè)月后屹培,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怔檩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年褪秀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薛训。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溜歪,死狀恐怖施籍,靈堂內(nèi)的尸體忽然破棺而出尸变,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布碴倾,位于F島的核電站懊蒸,受9級(jí)特大地震影響瘩缆,放射性物質(zhì)發(fā)生泄漏腿椎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一沛豌、第九天 我趴在偏房一處隱蔽的房頂上張望趋箩。 院中可真熱鬧,春花似錦加派、人聲如沸叫确。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竹勉。三九已至,卻和暖如春娄琉,著一層夾襖步出監(jiān)牢的瞬間次乓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工孽水, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票腰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓女气,卻偏偏與公主長得像杏慰,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炼鞠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ??曾經(jīng)有一段時(shí)間簇搅,XML 是互聯(lián)網(wǎng)上傳輸數(shù)據(jù)化結(jié)構(gòu)的事實(shí)標(biāo)準(zhǔn)完域。Web 服務(wù)的第一次浪潮很大程度上都是建立在 XM...
    霜天曉閱讀 364評(píng)論 0 1
  • 我們先來看一個(gè)JS中常見的JS對(duì)象序列化成JSON字符串的問題软吐,請(qǐng)問瘩将,以下JS對(duì)象通過JSON.stringify...
    程序員之路閱讀 992評(píng)論 0 6
  • 引言 曾經(jīng)有一段時(shí)間,XML是互聯(lián)網(wǎng)上傳輸結(jié)構(gòu)化數(shù)據(jù)的事實(shí)標(biāo)準(zhǔn)凹耙。Web服務(wù)的第一次浪潮很大程度上都是建立在XML之...
    DHFE閱讀 628評(píng)論 0 0
  • 我們先來看一個(gè)JS中常見的JS對(duì)象序列化成JSON字符串的問題肖抱,請(qǐng)問备典,以下JS對(duì)象通過JSON.stringify...
    Stinson閱讀 2,276評(píng)論 0 44
  • 兒子因?yàn)閰拰W(xué)已經(jīng)休學(xué)一年了。我從一開始的焦慮無助意述,到現(xiàn)在坦然接受提佣,甚至心懷感恩吮蛹,其間的心路歷程,跌宕起伏的程度拌屏,超...
    朵朵簡書閱讀 394評(píng)論 3 5