Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
JSON.parse() 静的メソッドは、文字列を JSON として解析し、文字列によって記述されている JavaScript の値やオブジェクトを構築します。オプションのリバイバー関数で、生成されたオブジェクトが返される前に変換を実行することができます。
JSON として解析する文字列。JSON の構文の説明は JSON オブジェクトを参照してください。
reviver 省略可もし関数である場合、解析により作り出された元の値を、オブジェクトを返す前に変換する方法を指示します。この関数は以下の引数で呼び出されます。
keyこの値に関連付けられたキー。
value解釈で生成された値。
context 省略可現在の式に関連する状態を保持するコンテキストオブジェクト。リバイバー関数を呼び出すたびに新しいオブジェクトが生成されます。このオブジェクトはプリミティブ値を復活させる場合のみ渡され、 value がオブジェクトや配列の場合は渡されません。以下のプロパティがあります。
sourceこの値を表す元の JSON 文字列。
Object, Array, 文字列, 数値, 論理値, null 値のいずれかで、指定された JSON の text に対応する値です。
解析する文字列が有効な JSON でない場合に発生します。
JSON.parse() は、 JSON の文法に従って JSON 文字列を構文解析し、 JavaScript 式であるかのように文字列を評価します。 JSON テキストの一部が、同じ JavaScript 式と異なる値を表す唯一の例は、 "__proto__" キーを扱う場合です。オブジェクトリテラル構文 vs. JSON を参照してください。
reviver を指定すると、構文解析で計算された値を変換してから返します。具体的には、計算された値とそのすべてのプロパティ(最も奥になったプロパティから、元の値自身へと深さ優先で)が個別にリバイバーに実行されます。
reviver は、処理対象のプロパティを含むオブジェクトを this として(アロー関数として reviver を定義しない限り、別個の this バインディングはありません)、 key と value の 2 つの引数を指定して呼び出されます。これらはそれぞれ、文字列としてのプロパティ名(配列の場合も同様)とプロパティ値を表します。プリミティブ値の場合は、さらに context 引数が渡され、この引数にはこの値のソーステキストが格納されます。 reviver 関数が undefined を返した場合(または返値がない場合、例えば、関数の終わりで実行が止まってしまった場合など)、プロパティはオブジェクトから削除されます。それ以外の場合、プロパティは返値を返すように再定義されます。もし reviver がある値だけを変換し、他の値を変換しない場合は、変換されない値をすべてそのまま返すようにしてください。
JSON.stringify() の replacer 引数と同様に、配列やオブジェクトの場合、 reviver は空文字列を key とし、ルートオブジェクトを value として、ルート値に対して最後に呼び出されます。他にも有効な JSON 値がある場合、 reviver は同様に動作し、空文字列を key とし、値そのものを value として一度だけ呼び出されます。
reviver から別の値を返すと、元々解釈できた値はその値によって完全に置き換えます。これはルート値にも適用されます。例えば、このようになります。
一般的にこれを回避する方法はありません。JSON オブジェクトには空文字列のキーも格納することができるため、キーが空文字列の場合を特別に処理することはできません。リバイバーを実装する際には、それぞれのキーに対してどのような変換が必要かをとても正確に知る必要があります。
reviver は値が解釈された後に実行されることに注意してください。そのため、例えば JSON テキストでの数値は既に JavaScript の数値に変換されており、その過程で精度を失うことがあります。精度を失うことなく大きな数値を変換する 1 つの方法は、文字列としてシリアライズし、長整数型や、他にも適切な任意の精度形式に復活させることです。
下記の通り、 context.source プロパティを使用して、値を表す元の JSON ソーステキストにアクセスすることもできます。
値を正しく丸める(つまり、同じ元のオブジェクトへシリアライズ解除する)ためには、シリアライズ処理で型情報を保持する必要があります。例えば、このために JSON.stringify() の replacer 引数を使用することができます。
JSON には型メタデータを記すための構文空間がないため、プレーンなオブジェクトではない値を復活させるには、以下のいずれかを考慮する必要があります:
JSON.parse が JSON の文法に適合しない文字列を受け取った場合、 SyntaxError が発生します。
JSON において、配列とオブジェクトには末尾のカンマを置くことができません。
JSON の文字列は(単一引用符でなく)二重引用符で区切らなければなりません。
JavaScript の文字列リテラル内で JSON を書く場合は、 JavaScript の文字列リテラルを区切るのに単一引用符を使用するか、 JSON 文字列を区切る二重引用符をエスケープする必要があります。
| ECMAScript® 2027 Language Specification # sec-json.parse |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年12月19日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.