JSON.parse() メソッドは文字列を JSON として解析し、文字列によって記述されている JavaScript の値やオブジェクトを構築します。任意の reviver 関数で、生成されたオブジェクトが返される前に変換を実行することができます。

構文

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}', (key, value) =>
  typeof value === 'number'
    ? value * 2 // 数値ならば値の2倍を返す
    : value     // それ以外ならば変更しない
);

// { p: 10 }

JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => {
  console.log(key); // 現在のプロパティ名を出力する。最後は ""。
  return 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)
JSON.parse の定義
標準 最初期の定義。JavaScript 1.7 で実装。
ECMAScript 2015 (6th Edition, ECMA-262)
JSON.parse の定義
標準  
ECMAScript Latest Draft (ECMA-262)
JSON.parse の定義
ドラフト  

ブラウザー実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応 あり あり3.5810.54
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり あり4 あり あり あり

関連情報

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

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