第20章留荔、JSON

20.1 語(yǔ)法

JSON的語(yǔ)法可以表示一下三種類型的值。
簡(jiǎn)單值:與JavaScript相同俐末,可以表示字符串,數(shù)值奄侠,布爾值和null卓箫,但不支持特殊值undefined。
對(duì)象:無(wú)需鍵值對(duì)垄潮。
數(shù)組:有序值的列表烹卒。
JSON不支持變量,函數(shù)或?qū)ο髮?shí)例弯洗,僅是一種表示結(jié)構(gòu)化數(shù)據(jù)的格式甫题。

20.1.1 簡(jiǎn)單值

JSON表示字符串時(shí)必須用雙引號(hào),單引號(hào)會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤涂召。其他簡(jiǎn)單值表示與JavaScript相同。

20.1.2 對(duì)象和數(shù)組

JSON中對(duì)象的屬性名稱要加雙引號(hào)敏沉。JSON對(duì)象沒(méi)有聲明變量果正,沒(méi)有末尾分號(hào)炎码,同一個(gè)對(duì)象不能出現(xiàn)兩個(gè)同名屬性。JSON數(shù)組的語(yǔ)法與JavaScript相同秋泳,但同樣也沒(méi)有變量和分號(hào)潦闲。


20.2 解析與序列化

20.2.1 序列化

JSON對(duì)象的stringify()方法用于將JavaScript對(duì)象序列化為JSON字符串。默認(rèn)情況下迫皱,輸出的JSON字符串不包含任何空格字符或縮進(jìn)歉闰。所有函數(shù)及原型都會(huì)被有意忽略,值為undefined的任何屬性也都會(huì)被跳過(guò)卓起。

var obj = {
    x:"a",
    y:"b",
    z:{
        z1:[1,2,3],
        z2:"z2"
    },
    u:undefined,
    f:function () {
        return this.x;
    }
};
console.log(JSON.stringify(obj));  // {"x":"a","y":"b","z":{"z1":[1,2,3],"z2":"z2"}}

JSON.stringify()方法第二個(gè)參數(shù)可以是一個(gè)數(shù)組或方法和敬,為數(shù)組時(shí),序列化的結(jié)果將只包含數(shù)組中列出的屬性昼弟。

console.log(JSON.stringify(obj,["x","y"]));  // {"x":"a","y":"b"}

第二個(gè)參數(shù)為方法時(shí),接收兩個(gè)參數(shù)奕筐,一個(gè)是屬性名舱痘,一個(gè)是屬性值,可以在方法中對(duì)屬性進(jìn)行操作离赫,根據(jù)函數(shù)的返回值改變序列化的結(jié)果芭逝。返回值為undefined的項(xiàng)會(huì)被忽略。

console.log(JSON.stringify(obj,function (key, value) {
    console.log(value);
    return value;
}));

JSON.stringify()方法第三個(gè)參數(shù)是用于控制縮進(jìn)和空白符渊胸,如果這個(gè)參數(shù)是一個(gè)數(shù)值旬盯,則表示每個(gè)級(jí)別縮進(jìn)的空格數(shù)〉潘ⅲ縮進(jìn)值最大為10瓢捉。

console.log(JSON.stringify(obj,null,4));
/*
{
    "x": "a",
    "y": "b",
    "z": {
        "z1": [
            1,
            2,
            3
        ],
        "z2": "z2"
    }
}
*/

當(dāng)縮進(jìn)參數(shù)為一個(gè)字符串時(shí),將用這個(gè)字符串來(lái)當(dāng)做縮進(jìn)符办成。

console.log(JSON.stringify(obj,null,"----"));
/*
{
----"x": "a",
----"y": "b",
----"z": {
--------"z1": [
------------1,
------------2,
------------3
--------],
--------"z2": "z2"
----}
}
*/

當(dāng)對(duì)象上有toJSON()方法時(shí)泡态,在序列化的時(shí)候會(huì)執(zhí)行toJSON()方法來(lái)返回序列化結(jié)果。

var obj = {
    x:"a",
    y:"b",
    z:{
        z1:[1,2,3],
        z2:"z2"
    },
    u:undefined,
    f:function () {
        return this.x;
    },
    toJSON:function () {
        return 0;
    }
};
console.log(JSON.stringify(obj));  // 0
20.2.2 解析

JSON.parse()方法用于將JSON字符串解析為JavaScript對(duì)象迂卢。同樣接收一個(gè)用于操作解析的方法作為參數(shù)某弦。與序列化方法的第二個(gè)參數(shù)相同,這個(gè)解析方法接收兩個(gè)參數(shù)一個(gè)是屬性名而克,一個(gè)是屬性值靶壮,可以在方法內(nèi)對(duì)每一項(xiàng)進(jìn)行操作,根據(jù)返回值改變解析的結(jié)果员萍。

var obj = {
    x:"a",
    y:"b",
    z:{
        z1:[1,2,3],
        z2:"z2"
    },
    u:undefined,
    f:function () {
        return this.x;
    }
};
var jsonObj = JSON.stringify(obj);
console.log(JSON.parse(jsonObj,function (key, value) {
    if(key==="x"){
        value +=1;
    }
    return value;
}));  // {x: "a1", y: "b", z: {…}}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腾降,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碎绎,更是在濱河造成了極大的恐慌螃壤,老刑警劉巖抗果,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奸晴,居然都是意外死亡冤馏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門寄啼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逮光,“玉大人,你說(shuō)我怎么就攤上這事墩划√楦眨” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵走诞,是天一觀的道長(zhǎng)副女。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚣旱,這世上最難降的妖魔是什么碑幅? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮塞绿,結(jié)果婚禮上沟涨,老公的妹妹穿的比我還像新娘。我一直安慰自己异吻,他們只是感情好裹赴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诀浪,像睡著了一般棋返。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雷猪,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天睛竣,我揣著相機(jī)與錄音,去河邊找鬼求摇。 笑死射沟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的与境。 我是一名探鬼主播验夯,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摔刁!你這毒婦竟也來(lái)了挥转?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绑谣,沒(méi)想到半個(gè)月后准潭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡域仇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寺擂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇务。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怔软,靈堂內(nèi)的尸體忽然破棺而出垦细,到底是詐尸還是另有隱情,我是刑警寧澤挡逼,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布括改,位于F島的核電站,受9級(jí)特大地震影響家坎,放射性物質(zhì)發(fā)生泄漏嘱能。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一虱疏、第九天 我趴在偏房一處隱蔽的房頂上張望惹骂。 院中可真熱鬧,春花似錦做瞪、人聲如沸对粪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)著拭。三九已至,卻和暖如春牍帚,著一層夾襖步出監(jiān)牢的瞬間儡遮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工履羞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峦萎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓忆首,卻偏偏與公主長(zhǎng)得像爱榔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糙及,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 關(guān)于JSON详幽,最重要的是要理解它是一種數(shù)據(jù)格式,不是一種編程語(yǔ)言。 20.1 語(yǔ)法 20.1.1 簡(jiǎn)單值 JS字符...
    __越過(guò)山丘__閱讀 162評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理唇聘,服務(wù)發(fā)現(xiàn)版姑,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 落日欄桿憑寂寂迟郎,風(fēng)嘯芭蕉剥险,瑟瑟添衣季。暮靄沉吟天際里宪肖,樹懸無(wú)力花枝細(xì)表制。 山映斜陽(yáng)堪忍顧,孤雁南飛控乾,...
    旒蘇閱讀 254評(píng)論 0 5
  • 大四好不容易就快過(guò)完了蜕衡,大學(xué)也快要過(guò)完了壤短,在這個(gè)尷尬的2012年,從大四一開學(xué)一切就已經(jīng)在開始變化了慨仿。從比完賽到...
    不用管我是誰(shuí)閱讀 181評(píng)論 0 0