JSON.parse()

JSON.parse() メソッドは文字列を JSON として解析し、また任意で解析によって作り出された値を変換します。

構文

JSON.parse(text[, reviver])

引数

text
JSON として解析する文字列。JSON の構文の説明は JSON オブジェクトを参照してください。
reviver Optional
もし関数である場合、解析により作り出された元の値を、オブジェクトを返す前に変換する方法を指示します。

戻り値

text として与えられた JSON に相当する 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 が指定されている場合、解析によって計算された値は、オブジェクトを返す前に変換されます。正確に言えば、計算された値とそのすべてのプロパティ(最もネストされたプロパティから始まり、元の値へと進みます)はそれぞれ reviver を通して変換されます。reviver は処理されるプロパティを含むオブジェクトが this として、また文字列のプロパティ名とプロパティの値を引数として呼び出されます。もし reviver 関数が undefined を返したり、何の値も返さなかったり(例えば実行が関数の終わりで【訳注: return 文によってではなくて】終了した場合)した場合、そのプロパティはオブジェクトから削除されます。そうでなければそのプロパティはその戻り値として再定義されます。

もし reviver が一部の値だけを変換して他を変換しないのであれば、必ずすべての変換されない値をそのまま返すようにします。そうしなければ、それらの値は結果のオブジェクトから削除されるでしょう。

JSON.parse('{"p": 5}', function(k, v) {
  if (typeof v === 'number') {
    return v * 2;  // 数字については v * 2 を返す
  }
  return v;        // 他のすべてはそのまま返す
});

// { p: 10 }

JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', function(k, v) {
  console.log(k); // 現在のプロパティ名を出力する。最後は ""。
  return v;       // 変更されていないプロパティの値を返す。
});

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

JSON.parse() は末尾のカンマを許容しません

// 両方とも SyntaxError をスローする
JSON.parse('[1, 2, 3, 4, ]');
JSON.parse('{"foo" : 1, }');

仕様

仕様書 策定状況 コメント
ECMAScript 5.1 (ECMA-262)
JSON.parse の定義
標準 最初期の定義。JavaScript 1.7 で実装されました。
ECMAScript 2015 (6th Edition, ECMA-262)
JSON.parse の定義
標準  
ECMAScript 2017 Draft (ECMA-262)
JSON.parse の定義
ドラフト  

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) 3.5 (1.9.1) 8.0 10.5 4.0
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) 1.0 (1.0) (有) (有) (有)

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

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: twe, teoli
 最終更新者: twe,