MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/8d22564490d8

JSON.parse()

翻譯不完整。請協助 翻譯此英文文件

JSON.parse() 方法把會把一個JSON字串轉換成 JavaScript的數值或是物件。另外也可選擇使用reviver函數讓這些數值或是物件在被回傳之前做轉換。

語法

JSON.parse(text[, reviver])

參數

text
要解析成 JSON 的字串。針對 JSON 語法的描述,請參見 JSON 物件。
reviver 選擇性
為選擇性的參數,用來描述JSON字串中的值該如何被解析並回傳的函式(function)

回傳值

從給定的 JSON text 回傳對應的 Object

Throws

如果解析的字串不是合法的JSON格式會丟出一個 SyntaxError 例外

Examples

Using 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函數有被指定,字串解析後產生出來的值會在函式回傳前經過轉換。 具體來講,解析後的值或是物件屬性會一個接一個地被這個reviver函數過濾(順序是由巢狀架構中最深的到最淺的),而當一個屬性即將被過濾時,該屬性的名稱(字串形態)以及值會被當作參數傳入reviver函數。如果reviver函數回傳了 undefined (或是沒有回傳值, 例如:函式提早結束),則該屬性會從物件中被刪除;反之如果成功的話,該屬性的值就會被新的回傳值取代。

如果reviver只需轉換某些特定的值,請記得將其他不須特別轉換的值以原來的值回傳,否則這些值會從回傳的結果物件中刪除。

JSON.parse('{"p": 5}', function(k, v) {
  if (typeof v === 'number') {
    return v * 2;  // return v * 2 for numbers
  }
  return v;        // return everything else unchanged
});

// { p: 10 }

JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', function(k, v) {
  console.log(k); // log the current property name, the last is "".
  return v;       // return the unchanged property value.
});

// 1
// 2
// 4
// 6
// 5
// 3 
// ""

JSON.parse() 不容許尾部有逗號

// 這兩個都會拋出 SyntaxError
JSON.parse('[1, 2, 3, 4, ]');
JSON.parse('{"foo" : 1, }');

規範

規範 狀態 註解
ECMAScript 5.1 (ECMA-262)
The definition of 'JSON.parse' in that specification.
Standard 初始定義。從 JavaScript 1.7 導入。
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'JSON.parse' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'JSON.parse' in that specification.
Draft  

瀏覽器相容性

特徵 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本功能 (Yes) 3.5 (1.9.1) 8.0 10.5 4.0
特徵 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本功能 (Yes) (Yes) 1.0 (1.0) (Yes) (Yes) (Yes)

Gecko相關

從Gecko 29版本開始(Firefox 29 / Thunderbird 29 / SeaMonkey 2.26),錯誤格式的JSON字串會產生更詳細的錯誤訊息,包含造成解析錯誤的行數及列數。這在針對大量JSON資料進行除錯時會很有幫助。

JSON.parse('[1, 2, 3, 4,]');
// SyntaxError: JSON.parse: unexpected character at
// line 1 column 13 of the JSON data

See also

文件標籤與貢獻者

 此頁面的貢獻者: bigbitesaint, matthung0807, iigmir, kuolun
 最近更新: bigbitesaint,