JSON.parse和JSON.stringify

JSON.parse()

JSON.parse()方法將json字符串轉(zhuǎn)化為Javascript值或?qū)ο蟆?/p>

語法

JSON.parse(text[,reviver])

參數(shù)

text:要被解析成Javascript值的字符串
reviver:若是一個函數(shù)則規(guī)定了原始值(text)如何被解析改造陈肛,在被返回前懂傀。

示例

JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null

使用reviver函數(shù)(解析值本身以及它所包含的所有屬性慎玖,會按照一定的順序:從最最里層的屬性開始一級級往外,最終到達頂層呻待,也就是解析值本身分別的去調(diào)用reviver函數(shù))

JSON.parse('{"p":5,"":100}',function(k,v){
          if(k === "") return v;
          return v*2;
})
返回:{p:10,"":100}


//從這個例子可以看出遍歷是從內(nèi)往外的打月。
JSON.parse('{"1":1,"2":2,"3":{"4":4,"5":{"6":6}}}',function(k,v){
          console.log(k); //輸出當前的屬性名,從而得知遍歷順序是從內(nèi)向外的蚕捉,最后一個屬性名會是個空字符串奏篙。
          return v;  //返回原始屬性值,相當于沒有傳遞reviver參數(shù)迫淹。
})
返回:1 2 4 6 5 3 ""

JSON.stringify()

JSON.stringify() 方法將一個JavaScript值轉(zhuǎn)換為一個JSON字符串秘通,如果指定了一個replacer函數(shù),則可以替換值敛熬,或者如果指定了一個replacer數(shù)組肺稀,可選的僅包括指定的屬性.

語法

JSON.stringify(value[,replacer[,space]])

參數(shù)

value:將要序列化成 一個JSON字符串的值
replacer:如果該參數(shù)是一個函數(shù),則在序列化過程中应民,被序列化的值的每個屬性都會經(jīng)過該函數(shù)的轉(zhuǎn)換和處理话原;如果該參數(shù)是一個數(shù)組夕吻,則只有包含在這個數(shù)組中的屬性名才會被序列化到最終的 JSON 字符串中;如果該參數(shù)為null或者未提供繁仁,則對象所有的屬性都會被序列化涉馅;
space:指定縮進用的空白字符串,用于美化輸出(pretty-print)改备;如果參數(shù)是個數(shù)字控漠,它代表有多少的空格;上限為10悬钳。該值若小于1,則意味著沒有空格偶翅;如果該參數(shù)為字符串(字符串的前十個字母)默勾,該字符串將被作為空格;如果該參數(shù)沒有提供(或者為null)將沒有空格聚谁。

描述

關(guān)于序列化母剥,有下面五點注意事項:

1.非數(shù)組對象的屬性不能保證以特定的順序出現(xiàn)在序列化后的字符串中。
2.布爾值形导、數(shù)字环疼、字符串的包裝對象在序列化過程中會自動轉(zhuǎn)換成對應(yīng)的原始值。
3.undefined朵耕、任意的函數(shù)以及 symbol 值炫隶,在序列化過程中會被忽略(出現(xiàn)在非數(shù)組對象的屬性值中時)或者被轉(zhuǎn)換成 null(出現(xiàn)在數(shù)組中時)。
4.所有以 symbol 為屬性鍵的屬性都會被完全忽略掉阎曹,即便 replacer 參數(shù)中強制指定包含了它們伪阶。
5.不可枚舉的屬性會被忽略

JSON.stringify({});                        // '{}'
JSON.stringify(true);                      // 'true'
JSON.stringify("foo");                     // '"foo"'
JSON.stringify([1, "false", false]);       // '[1,"false",false]'
JSON.stringify({ x: 5 });                  // '{"x":5}'

JSON.stringify({x: 5, y: 6});              
// "{"x":5,"y":6}"

JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); 
// '[1,"false",false]'

JSON.stringify({x: undefined, y: Object, z: Symbol("")}); 
// '{}'

JSON.stringify([undefined, Object, Symbol("")]);          
// '[null,null,null]' 

JSON.stringify({[Symbol("foo")]: "foo"});                 
// '{}'

JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'

JSON.stringify(
    {[Symbol.for("foo")]: "foo"}, 
    function (k, v) {
        if (typeof k === "symbol"){
            return "a symbol";
        }
    }
);


// undefined 

// 不可枚舉的屬性默認會被忽略:
JSON.stringify( 
    Object.create(
        null, 
        { 
            x: { value: 'x', enumerable: false }, 
            y: { value: 'y', enumerable: true } 
        }
    )
);

// "{"y":"y"}"

replacer參數(shù)

function replacer(key,value){
      if(typeof value === "string"){
          return undefined;
    }
    return value;
}
var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo,replacer);
返回:{"week":45,"month":7};

//如果replacer是一個數(shù)組,數(shù)組的值代表將被序列化成JSON字符串的屬性名
JSON.stringify(foo,["model","transport"]);
返回: '{"model":"box","transport":"car"}';
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市处嫌,隨后出現(xiàn)的幾起案子栅贴,更是在濱河造成了極大的恐慌,老刑警劉巖熏迹,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檐薯,死亡現(xiàn)場離奇詭異,居然都是意外死亡注暗,警方通過查閱死者的電腦和手機坛缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來友存,“玉大人祷膳,你說我怎么就攤上這事÷帕ⅲ” “怎么了直晨?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵搀军,是天一觀的道長。 經(jīng)常有香客問我勇皇,道長罩句,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任敛摘,我火速辦了婚禮门烂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兄淫。我一直安慰自己屯远,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布捕虽。 她就那樣靜靜地躺著慨丐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泄私。 梳的紋絲不亂的頭發(fā)上房揭,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音晌端,去河邊找鬼捅暴。 笑死,一個胖子當著我的面吹牛咧纠,可吹牛的內(nèi)容都是我干的蓬痒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼惧盹,長吁一口氣:“原來是場噩夢啊……” “哼乳幸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钧椰,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤粹断,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嫡霞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓶埋,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年诊沪,在試婚紗的時候發(fā)現(xiàn)自己被綠了养筒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡端姚,死狀恐怖晕粪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渐裸,我是刑警寧澤巫湘,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布装悲,位于F島的核電站,受9級特大地震影響尚氛,放射性物質(zhì)發(fā)生泄漏诀诊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一阅嘶、第九天 我趴在偏房一處隱蔽的房頂上張望属瓣。 院中可真熱鬧,春花似錦讯柔、人聲如沸抡蛙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溜畅。三九已至,卻和暖如春极祸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怠晴。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工遥金, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒜田。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓稿械,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冲粤。 傳聞我的和親對象是個殘疾皇子美莫,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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