js JSON

1.基本語法

json的語法可以表示爲三種類型的值

1.簡單值:適用於js相同的語法,可以在json中表示字符串、數值、布爾值和null,但是不支持undefined。

  • json字符串與js字符串最大的不同是在json中字符串

2.對象:表示一組無序的鍵值對。

{
    "name":"lucy",
    "age":"22"
}

與js中的字面量不同,json中的對象不需要聲明(json中沒有變量的概念),其次,沒有末尾的分號。

3.數組:表示一組有組的值的列表。

["hi",25,"js"]

把數組和對象結合起來,就能構成更復雜的數據集合。

2.序列化JSON

stringify方法,主要用於把JavaScript對象序列化爲json字符串。

var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book);
    console.log(jsonText);

/*運行結果,不包含任何空格或縮進*/
//{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}

該方法還可以接受參數,兩個參數用於以不同的方式序列化JavaScript對象。第一個參數是一個過濾器,可以是數組,也可以是函數。第二個參數是一個選項,用來表示是否在JSON對象中保留縮進。

1、過濾器參數爲數組。

var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }

    var jsonText = JSON.stringify(book,["title","edition"]);

/*運行結果,只包括數組中的項*/
//{"title":"Professional JavaScript","edition":3}

2.過濾器參數爲函數。

var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }
var jsonText = JSON.stringify(book, function (key,value) {
///如果返回的值爲undefined,則相應的屬性會被忽略掉
   switch(key){
       case "authors":
           return value.join(',');
       case "edition":
           return undefined;
       case "year":
           return 5000;
       default : //如果不設置default的值,其他的屬性有可能會被忽略掉
           return value;
   }

});

console.log(jsonText);

//{"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}

3.字符串縮進

 var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book, null, 4);
    console.log(jsonText);
//    {
//        "title": "Professional JavaScript",
//            "authors": [
//        "Nicholas C. Zakas"
//    ],
//            "edition": 3,
//            "year": 2011
//    }

4.toJSON()方法:

可以爲任何對象添加toJSON方法。可以作爲過濾器的補充。

 var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011,
        toJSON: function () {
            return this.title;
        }
    }
    var jsonText = JSON.stringify(book);
    console.log(jsonText);//"Professional JavaScript"

序列化的內部順序:

1,如果存在toJSON()方法並且能通過他取得有效的值,則調用該方法。否則,返回對象本身。
2.如果存在第二個參數,應用過濾器,傳入過濾器的值應該爲第一步得到的值。
3.對第二部得到的結果進行序列化。
4.如果提供了第三個參數,執行相應的序列化。

3.解析JSON

JSON.parse()方法:將JSON字符串解析爲原生的javaScript值。也可以接受一個參數,這個參數是一個函數,可以在每一對鍵值對上進行調用。

 var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011,
        relaseDate:new Date(2016,11,11)
    }
    var jsonText = JSON.stringify(book);
    var bookCopy = JSON.parse(jsonText, function (key,value) {
        if(key == 'relaseDate'){
            return new Date(value);
        }else{
            return value;
        }
    });
    console.log(bookCopy);

運行結果::

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章