淺談JSON中stringify 函數、toJosn函數和parse函數,jsonstringify

來源:互聯網
上載者:User

淺談JSON中stringify 函數、toJosn函數和parse函數,jsonstringify

JSON.stringify 函數 (JavaScript)

文法:JSON.stringify(value [, replacer] [, space])

將 JavaScript 值轉換為 JavaScript 物件標記法 (Json) 字串。

複製代碼 代碼如下:
value
必需。 要轉換的 JavaScript 值(通常為對象或數組)。
replacer
可選。 用於轉換結果的函數或數組。
如果 replacer 為函數,則 JSON.stringify 將調用該函數,並傳入每個成員的鍵和值。 使用傳回值而不是原始值。 如果此函數返回 undefined,則排除成員。 根對象的鍵是一個Null 字元串:""。
如果 replacer 是一個數組,則僅轉換該數組中具有索引值的成員。 成員的轉換順序與鍵在數組中的順序一樣。 當 value 參數也為數組時,將忽略 replacer 數組。
space
可選。 向傳回值 JSON 文本添加縮排、空格和分行符號以使其更易於讀取。
如果省略 space,則將產生傳回值文本,而沒有任何額外空格。
如果 space 是一個數字,則傳回值文本在每個層級縮排指定數目的空格。 如果 space 大於 10,則文本縮排 10 個空格。
如果 space 是一個非Null 字元串(例如“\t”),則傳回值文本在每個層級中縮排字串中的字元。
如果 space 是長度大於 10 個字元的字串,則使用前 10 個字元。

如果 value 具有 toJSON 方法,則 JSON.stringify 函數將使用該方法的傳回值。 如果 toJSON 方法的傳回值為 undefined,則不轉換成員。 這使對象能夠確定自己的 JSON 表示形式。

將不會轉換不具有 JSON 表示形式的值,例如 undefined。 在對象中,將丟棄這些值。 在數組中,會將這些值替換為 null。

執行順序

在序列化過程中,如果 value 參數對應有 toJSON 方法,則 JSON.stringify 將首先調用 toJSON 方法。 如果該方法不存在,則使用原始值。 接下來,如果提供 replacer 參數,則該值(原始值或 toJSON 傳回值)將替換為 replacer 參數的傳回值。 最後,根據可選 space 參數向該值添加空格以產生最終的 JSON 文本。

此樣本使用 JSON.stringify 將 contact 對象轉換為 JSON 文本。 定義 memberfilter 數組以便只轉換surname 和 phone 成員。 省略 firstname 成員。

複製代碼 代碼如下:
var contact = new Object();
contact.firstname = "Jesper";
contact.surname = "Aaberg";
contact.phone = ["555-0100", "555-0120"];
var memberfilter = new Array();
memberfilter[0] = "surname";
memberfilter[1] = "phone";
var jsonText = JSON.stringify(contact, memberfilter, "\t");
document.write(jsonText);
// Output:
// { "surname": "Aaberg", "phone": [ "555-0100", "555-0120" ] }

toJSON 方法 (Date) (JavaScript)

文法:objectname.toJSON()

objectname

必需。 需要進行 JSON 序列化的對象。

toJSON 方法是 Date JavaScript 對象的內建成員。 它返回 UTC 時區的 ISO 格式日期文字(由尾碼 Z 表示)。

以下樣本使用 toJSON 方法將大寫的字串成員值序列化。 在調用 JSON.stringify 時調用 toJSON 方法。

複製代碼 代碼如下:
JavaScript
var contact = new Object();
contact.firstname = "Jesper";
contact.surname = "Aaberg";
contact.phone = ["555-0100", "555-0120"];
contact.toJSON = function(key)
 {
    var replacement = new Object();
    for (var val in this)
    {
        if (typeof (this[val]) === 'string')
            replacement[val] = this[val].toUpperCase();
        else
            replacement[val] = this[val]
    }
    return replacement;
};
var jsonText = JSON.stringify(contact);
/* The value of jsonText is:
'{"firstname":"JESPER","surname":"AABERG","phone":["555-0100","555-0120"]}'
*/

JSON.parse 函數 (JavaScript)

將 JavaScript 物件標記法 (JSON) 字串轉換為對象

文法:JSON.parse(text [, reviver])

複製代碼 代碼如下:
text
必需。 一個有效 JSON 字串。
reviver
可選。 一個轉換結果的函數。 將為對象的每個成員調用此函數。 如果成員包含嵌套對象,則先於父物件轉換嵌套對象。 對於每個成員,會發生以下情況:
如果 reviver 返回一個有效值,則成員值將替換為轉換後的值。
如果 reviver 返回它接收的相同值,則不修改成員值。
如果 reviver 返回 null 或 undefined,則刪除成員。

以下樣本使用 JSON.parse 將 JSON 字串轉換成對象。

複製代碼 代碼如下:
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
document.write(contact.surname + ", " + contact.firstname);
// Output: Aaberg, Jesper

以下樣本示範了如何使用 JSON.stringify 將數群組轉換成 JSON 字串,然後使用 JSON.parse 將該字串重新轉換成數組。

複製代碼 代碼如下:
var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
document.write(str);
document.write ("<br/>");
var newArr = JSON.parse(str);
while (newArr.length > 0) {
    document.write(newArr.pop() + "<br/>");
}
// Output:
// ["a","b","c"]
// c
// b
// a

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.