JavaScript 對象與 JSON 對象的相互轉換

一、全局JSON對象

ES5定義了全局對象JSON,對解析JSON的行爲制定了規範。
JSON對象有兩個方法:stringify() 和 parse()。

二、JavaScript 對象序列化爲 JSON對象

JSON.stringify( js對象 [, 過濾器] [, 選項])
二三參數可選,js對象中的函數和原型成員將被忽略,值爲undefined的屬性也被跳過。
默認情況下,返回的JSON不包含任何空格字符和縮進。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book);

過濾器爲數組:JSON.stingify() 的結果只包含數組中列出的屬性。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, ["title", "edition"]);
jsonText的值爲 {"title": "Professional JavaScript", "edition": 3}

過濾器爲函數:函數接收兩個參數,鍵名和值(key, value)。函數體中根據鍵名處理對應的值。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

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 值爲:{"title": "Professional JavaScript", "authors": "Nicholas C. Zakas", "year": 5000}

第三個參數用於控制結果的縮進:
參數爲數值 ----- 表示縮進的空格數。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, null, 4);
jsonText 中的字符串:
{
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    "edition": 3,
    "year": 2011
}

參數爲字符串 ----- 表示使用該字符串進行縮進。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, null, " - -");
jsonText 中的字符串:
{
--"title": "Professional JavaScript",
--"authors": [
----"Nicholas C. Zakas"
--],
--"edition": 3,
--"year": 2011
}

(還可以爲對象定義 toJSON() 方法,實現對其進行自定義序列化的需求。)


三、JSON對象解析爲 JavaScript 對象

JSON.parse(json對象 [, 還原函數])
還原參數接收兩個參數,鍵和值。如果返回undefined,則表示從結果中刪除相應的鍵;如果返回其他值,則將該值插入到結果中。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011,
            releaseDate: new Date(2011, 11, 1)
           };

var jsonText = JSON.stringify(book);        
var bookCopy = JSON.parse(jsonText, function(key, value){
    if (key == "releaseDate"){
        return new Date(value);
    } else {
        return value;
    }
});

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