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