JSON.parse()

來源:互聯網
上載者:User

標籤:

概述

JSON.parse() 方法可以將一個 JSON 字串解析成為一個 JavaScript 值。在解析過程中,還可以選擇性的修改某些屬性的原始解析值。

文法

JSON.parse(text[, reviver])

參數

text

要解析的 JSON 字串,可以查看 JSON 一文瞭解 JSON 的文法。

reviver 可選

一個函數,用來轉換解析出的屬性值。

傳回值

從 text 字串解析出的一個 Object。

異常

如果被解析的 JSON 字串包含語法錯誤,則會拋出 SyntaxError 異常。

樣本

使用 JSON.parse()

JSON.parse(‘{}‘);              // {}

JSON.parse(‘true‘);            // true

JSON.parse(‘"foo"‘);           // "foo"

JSON.parse(‘[1, 5, "false"]‘); // [1, 5, "false"]

JSON.parse(‘null‘);            // null

使用 reviver 函數

如果指定了 reviver 函數,則解析出的 JavaScript 值(解析值)會經過一次轉換後才將被最終返回(傳回值)。更具體點講就是:解析值本身以及它所包含的所有屬性,會按照一定的順序(從最最裡層的屬性開始,一級級往外,最終到達頂層,也就是解析值本身)分別的去調用 reviver 函數,在調用過程中,當前屬性所屬的對象會作為 this 值,當前屬性名稱和屬性值會分別作為第一個和第二個參數傳入 reviver 中。如果 reviver 返回 undefined,則當前屬性會從所屬對象中刪除,如果返回了其他值,則返回的值會成為當前屬性新的屬性值。

當遍曆到最頂層的值(解析值)時,傳入 reviver 函數的參數會是Null 字元串 ""(因為此時已經沒有真正的屬性)和當前的解析值(有可能已經被修改過了),當前的 this 值會是 {"": 修改過的解析值},在編寫 reviver 函數時,要注意到這個特例。

JSON.parse(‘{"p": 5}‘, function (k, v) {

    if(k === ‘‘) return v;     // 如果到了最頂層,則直接返回屬性值,

    return v * 2;              // 否則將屬性值變為原來的 2 倍。

});                            // { p: 10 }

 

JSON.parse(‘{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}‘, function (k, v) {

    console.log(k); // 輸出當前的屬性名稱,從而得知遍曆順序是從內向外的,

                    // 最後一個屬性名稱會是個Null 字元串。

    return v;       // 返回原始屬性值,相當於沒有傳遞 reviver 參數。

});

 

// 1

// 2

// 4

// 6

// 5

// 3

// ""

JSON.parse() 不允許用逗號作為結尾

// both will throw a SyntaxError

JSON.parse("[1, 2, 3, 4, ]");

JSON.parse(‘{"foo" : 1, }‘);

規範

正式名稱

規範狀態

備忘

ECMAScript 5.1 (ECMA-262)
JSON.parse

Standard

首次定義,於 JavaScript 1.7 版本中實現。

ECMAScript 2015 (6th Edition, ECMA-262)
JSON.parse

Standard

 

瀏覽器安全色性

  • Desktop

 

  • Mobile

Feature

Chrome

Firefox (Gecko)

Internet Explorer

Opera

Safari

Basic support

(Yes)

3.5 (1.9.1)

8.0

10.5

4.0

Gecko 備忘

從 Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) 開始,如果被解析的 JSON 字串含有語法錯誤,則該方法拋出的錯誤資訊中將包含錯誤發生時具體的行列號,這個特性對於調試大型 JSON 資料來說是很有用的。

JSON.parse(‘[1, 2,3,]‘)

//SyntaxError: JSON.parse: unexpected character at

// line 1column 10 of the JSON data

相關連結

  • JSON.stringify()

 

JSON.parse()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.