概要
JSON.parse() メソッドは文字列を JSON として解析し、また任意で解析によって作り出された値を変換します。
JSON のメソッド |
|
|---|---|
| 実装されたバージョン | JavaScript 1.7 |
| ECMAScript エディション | ECMAScript 5th Edition |
構文
JSON.parse(text[, reviver])
引数
-
text -
JSON として解析する文字列。JSON の構文の説明は
JSONオブジェクトを参照してください。 -
reviver - もし関数である場合、解析により作り出された元の値を、オブジェクトを返す前に変換する方法を指示します。
戻り値
text として与えられた JSON に相当する Object を返します。
例外
もし解析する文字列が有効な JSON でない場合、SyntaxError 例外をスローします。
例
例: JSON.parse() の使用
try {
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
} catch (e) {
console.error("Parsing error:", e);
}
例: reviver 引数の使用
もし reviver が指定されている場合、解析によって計算された値は、オブジェクトを返す前に変換されます。正確に言えば、計算された値とそのすべてのプロパティ(最もネストされたプロパティから始まり、元の値へと進みます)はそれぞれ reviver を通して変換されます。reviver は処理されるプロパティを含むオブジェクトが this として、また文字列のプロパティ名とプロパティの値を引数として呼び出されます。もし reviver 関数が undefined を返したり、何の値も返さなかったり(例えば実行が関数の終わりで【訳注: return 文によってではなくて】終了した場合)した場合、そのプロパティはオブジェクトから削除されます。そうでなければそのプロパティはその戻り値として再定義されます。
reviver は最終的に空文字列と最上位の値で呼び出され、最上位の値の変換ができます。この場合を適切に処理するために、通常提供された値を返すようにします。そうしなければ JSON.parse は undefined を返すでしょう。
try {
var transformed = JSON.parse('{"p": 5}',
function(k, v) { if (k === "") return v; return v * 2; });
// transformed は { p: 10 }
} catch (e) {
console.error("Parsing error:", e);
}
仕様
| 仕様書 | 策定状況 | コメント |
|---|---|---|
| ECMAScript Language Specification 5.1th Edition (ECMA-262) | Standard | 最初期の定義。 JavaScript 1.7 で実装されました。 |
| ECMAScript Language Specification 6th Edition (ECMA-262) | ドラフト |
ブラウザ実装状況
| 機能 | 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) | (有) | (有) | (有) |
Kangax's compat table に基づく。
Gecko 固有の注意事項
- Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) より、不正な JSON 文字列を解析すると解析エラーが発生した行番号と桁番号を含むエラーメッセージが発生します。これは大規模な JSON データをデバッグするときに便利です。