JS—JSON

JSON與XML都是結(jié)構(gòu)化數(shù)據(jù)的表現(xiàn)方式收奔。
回憶一下XML掌呜,
1、創(chuàng)建xml 文檔對(duì)象坪哄,用來存放加載xml文檔质蕉,或解析字符串后的結(jié)果。
2翩肌、將XML字符串解析模暗,即將xml字符串解析成為XML DOM文檔,對(duì)文檔內(nèi)容的訪問與修改還需要使用DOM方法念祭。
3兑宇、將xml DOM文檔序列化為xml字符串。
JSON呢粱坤?
JSON(JavaScript Object Notation:js對(duì)象表示法)利用javascript中的一些模式隶糕,來表示結(jié)構(gòu)化的數(shù)據(jù)。不是一門編程語言站玄,只是一種數(shù)據(jù)格式枚驻。也并不是只有js才使用JSON,很多編程語言都有針對(duì)JSON這種數(shù)據(jù)的格式的解析器和序列化器株旷。

        [
            {
                "title":"a",
                "num":1,
                "height":178
            },
            {
                "title":"b",
                "num":2,
                "height":188
            },
            {
                "title":"c",
                "num":3,
                "height":198
            }
        ]

上面這種表示方法测秸,很眼熟,當(dāng)我們以對(duì)象字面量的表示法創(chuàng)建對(duì)象灾常,或者數(shù)組的時(shí)候就是這樣,不同的是铃拇,每個(gè)鍵值都被雙引號(hào)括起來钞瀑,例如"num":1。且沒有分號(hào)結(jié)尾慷荔。

  • JSON語法
    JSON語法是js語法的一部分雕什,JSON語法可以表示以下三種類型的值,

  • 簡單值:可以在json中表示字符串显晶、數(shù)值贷岸、布爾值和null,但是不能表示undefined磷雇。

  • 對(duì)象:無序的鍵值對(duì)偿警,例如上面展示的數(shù)組里的每一個(gè)對(duì)象。

  • 數(shù)組:有序的值的列表唯笙。
    最常用的json數(shù)據(jù)格式就是上面粘的那段代碼螟蒸。
    觀察盒使,會(huì)發(fā)現(xiàn)json并沒有聲明變量的語句,所以通過加載json文件或者解析json格式的字符串生成一個(gè)js對(duì)象七嫌,可以將結(jié)果賦給一個(gè)變量少办,然后通過該變量,以js語法的格式訪問诵原。對(duì)比xml要解析成dom文檔英妓,要簡單的多。

  • 解析以及序列化

  • 解析

    • 解析加載的.json文件
      這個(gè)需要等到學(xué)習(xí)ajax時(shí)候才可以了解绍赛。
    • 解析json格式的字符串
      • 早期的JSON解析器就是使用eval()函數(shù)蔓纠,來解析解釋返回javascript對(duì)象和數(shù)組。但是這個(gè)方法不那么安全惹资,可能會(huì)執(zhí)行一些惡意代碼贺纲。
        var json='[{"title":"a","num":1},{"title":"b","num":2}]';
        alert(typeof json);//string
        var box=eval(json);
        alert(typeof box);//object
      • 全局對(duì)象:JSON,該對(duì)象有兩個(gè)方法褪测,分別用來解析以及序列化猴誊。
        但是只有IE8+、Firefox3.5+侮措、Safari4+懈叹、chrome、Opera10.5+支持分扎。對(duì)于較早的版本可以在加載一個(gè)外部文件:json.js澄成,來新建一個(gè)JSON對(duì)象(去網(wǎng)上下載)。
        var json='[{"title":"a","num":1},{"title":"b","num":2}]';
        var box=JSON.parse(json);
        alert(box[0].num);//1
        該方法還接受一個(gè)參數(shù)畏吓,該參數(shù)是一個(gè)函數(shù)墨状,將在每個(gè)鍵值對(duì)上調(diào)用。
        var json='[{"title":"a","num":1},{"title":"b","num":2}]';
        var box=JSON.parse(json,function(key,value){
        switch (key){
        case "title":
        return "Miss "+value;
        case "num":
        return value;
        default :
        return value
        }
        });
        alert(box[0].title)//Miss a
  • 序列化
    var json='[{"title":"a","num":1},{"title":"b","num":2}]';
    var box=JSON.parse(json);
    alert(JSON.stringify(box)); //打印字符串
    事實(shí)上菲饼,JSON的方法stringfy還有其他的參數(shù)肾砂,第一個(gè)餐宿是一個(gè)過濾器,可以是一個(gè)數(shù)組宏悦,也可以是一個(gè)我函數(shù)镐确,第二個(gè)參數(shù)是一個(gè)選項(xiàng),表示是否在json字符串中保留縮進(jìn)饼煞。單獨(dú)或組合使用均可以源葫。

    • 第一個(gè)參數(shù)
      【如果是數(shù)組】JSON.stringify()將只包含數(shù)組中列出的選項(xiàng)。
      var json='[{"title":"a","num":1,"height":177},{"title":"b","num":2,"height":188}]';
      var box=JSON.parse(json);
      alert(JSON.stringify(box,['num',"height"]));//[{"num":1,"height":177},{"num":2,"height":188}]
      【如果是函數(shù)】函數(shù)的第一個(gè)參數(shù)key表示鍵值砖瞧,第二個(gè)參數(shù)value表示鍵值對(duì)應(yīng)的屬性
      var json='[{"title":"a","num":1,"height":177},{"title":"b","num":2,"height":188}]';
      var box=JSON.parse(json);
      var jsontext=JSON.stringify(box,function(key,value){
      switch(key){
      case "title":
      return "《"+value+"》";
      case "num":
      return 0;
      case "height":
      return value;
      default:
      return value;
      }
      });
      alert(jsontext)

    • 第二個(gè)參數(shù)用于控制結(jié)果中的縮進(jìn)和空白符息堂。可以是數(shù)值芭届,代表縮進(jìn)的空格數(shù)储矩,如果是字符感耙,代表縮進(jìn)填充的字符
      var json='[{"title":"a","num":1},{"title":"b","num":2}]';
      var box=JSON.parse(json);
      alert(JSON.stringify(box,null,4));
      如果第三個(gè)參數(shù)需要,但第二個(gè)參數(shù)不需要持隧,就直接傳一個(gè)null就可以即硼。

    • toJSON()方法
      可以為任何對(duì)象添加這個(gè)方法,當(dāng)把該對(duì)象作為參數(shù)殘遞給JSON.stringify()時(shí)屡拨,會(huì)自動(dòng)調(diào)用toJSON這個(gè)方法只酥,并將該方法放回的對(duì)象進(jìn)行序列化。
      var json=[
      {
      title:'a',
      num:1,
      height:177,
      toJSON:function(){
      return {title:this.title,num:this.num};
      }
      },
      {
      title:'b',
      num:2,
      height:177,
      toJSON:function(){
      return {title:this.title,num:this.num};
      }
      },
      {
      title:'c',
      num:3,
      height:177,
      toJSON:function(){
      return {title:this.title,num:this.num};
      }
      }
      ];
      var jsontext=JSON.stringify(json);
      alert(jsontext)
      還必須額外了解一下呀狼,序列化該對(duì)象的順序裂允。如果存在該方法,那么優(yōu)先執(zhí)行該方法哥艇,如果還存在過濾器參數(shù)绝编,那么在對(duì)該方法返回的結(jié)果進(jìn)行過濾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末貌踏,一起剝皮案震驚了整個(gè)濱河市十饥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祖乳,老刑警劉巖逗堵,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異眷昆,居然都是意外死亡蜒秤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門亚斋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來作媚,“玉大人,你說我怎么就攤上這事帅刊〉嗫ィ” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵厚掷,是天一觀的道長。 經(jīng)常有香客問我级解,道長冒黑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任勤哗,我火速辦了婚禮抡爹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芒划。我一直安慰自己冬竟,他們只是感情好欧穴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泵殴,像睡著了一般涮帘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笑诅,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天调缨,我揣著相機(jī)與錄音,去河邊找鬼吆你。 笑死弦叶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妇多。 我是一名探鬼主播伤哺,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼者祖!你這毒婦竟也來了立莉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤咸包,失蹤者是張志新(化名)和其女友劉穎桃序,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烂瘫,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媒熊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坟比。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芦鳍。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖葛账,靈堂內(nèi)的尸體忽然破棺而出柠衅,到底是詐尸還是另有隱情,我是刑警寧澤籍琳,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布菲宴,位于F島的核電站,受9級(jí)特大地震影響趋急,放射性物質(zhì)發(fā)生泄漏喝峦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一呜达、第九天 我趴在偏房一處隱蔽的房頂上張望谣蠢。 院中可真熱鬧,春花似錦、人聲如沸眉踱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈喳。三九已至册烈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叁执,已是汗流浹背茄厘。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谈宛,地道東北人次哈。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像吆录,于是被迫代替她去往敵國和親窑滞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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