From 3e80473ed0b9d356ea1dd93ec6e2bbfd2acec2da Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Mon, 31 May 2021 13:32:59 +0900 Subject: Web/JavaScript/Reference/Global_Objects/JSON/parse を更新 (#943) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2021/05/05 時点の英語版に同期 - 訳注マクロを削除。内容が訳注の役割を超えていると思われるため、訳注全体を削除。 --- .../reference/global_objects/json/parse/index.html | 87 ++++++++++------------ 1 file changed, 38 insertions(+), 49 deletions(-) (limited to 'files') diff --git a/files/ja/web/javascript/reference/global_objects/json/parse/index.html b/files/ja/web/javascript/reference/global_objects/json/parse/index.html index bb6736a553..c04a8a863b 100644 --- a/files/ja/web/javascript/reference/global_objects/json/parse/index.html +++ b/files/ja/web/javascript/reference/global_objects/json/parse/index.html @@ -2,12 +2,13 @@ title: JSON.parse() slug: Web/JavaScript/Reference/Global_Objects/JSON/parse tags: - - ECMAScript 5 - - JSON - - JavaScript - - Method - - Reference - - メソッド +- ECMAScript 5 +- JSON +- JavaScript +- Method +- Reference +- メソッド +browser-compat: javascript.builtins.JSON.parse translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse ---
{{JSRef}}
@@ -16,32 +17,34 @@ translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse
{{EmbedInteractiveExample("pages/js/json-parse.html")}}
- -

構文

+

構文

-
JSON.parse(text[, reviver])
+
+JSON.parse(text)
+JSON.parse(text, reviver)
+
-

引数

+

引数

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

返値

+

返値

{{jsxref("Object")}}, {{jsxref("Array")}}, 文字列, 数値, 論理値, null 値のいずれかで、指定された JSON の text に対応する値です。

-

例外

+

例外

解析する文字列が有効な JSON でない場合、{{jsxref("SyntaxError")}} 例外が発生します。

-

ポリフィル

+

ポリフィル

-
// From https://github.com/douglascrockford/JSON-js/blob/master/json2.js
+
// From https://github.com/douglascrockford/JSON-js/blob/master/json2.js
 if (typeof JSON.parse !== "function") {
     var rx_one = /^[\],:{}\s]*$/;
     var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
@@ -78,7 +81,6 @@ if (typeof JSON.parse !== "function") {
             return reviver.call(holder, key, value);
         }
 
-
         // Parsing happens in four stages. In the first stage, we replace certain
         // Unicode characters with escape sequences. JavaScript handles many characters
         // incorrectly, either silently deleting them, or treating them as line endings.
@@ -133,30 +135,30 @@ if (typeof JSON.parse !== "function") {
                 j;
         }
 
-        // If the text is not JSON parseable, then a SyntaxError is thrown.
+        // If the text is not JSON parsable, then a SyntaxError is thrown.
 
         throw new SyntaxError("JSON.parse");
     };
 }
-

+

-

JSON.parse() の使用

+

JSON.parse() の使用

-
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 を通して変換されます。reviver は処理されるプロパティを含むオブジェクトが this として、また文字列のプロパティ名とプロパティの値を引数として呼び出されます。もし reviver 関数が {{jsxref("undefined")}} を返したり、何の値も返さなかったり(例えば実行が関数の終わりで{{訳注('return 文によってではなくて')}}終了した場合)した場合、そのプロパティはオブジェクトから削除されます。そうでなければそのプロパティはその戻り値として再定義されます。

+

reviver が指定された場合、解析によって計算された値は、返却される前に変換されます。具体的には、計算された値とそのすべてのプロパティ (最も深いプロパティから始まり、元の値自身に至るまで) は、個別に reviver を通して変換されます。そして、処理されるプロパティを含むオブジェクトを this とし、プロパティ名を文字列、プロパティ値を引数にして、これが呼び出されます。もし reviver 関数が {{jsxref("undefined")}} を返した場合 (または、値を返さなかった場合、例えば関数の途中で実行が中断された場合など)、そのプロパティはオブジェクトから削除されます。そうでなければそのプロパティは返値として再定義されます。

-

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

+

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

-
JSON.parse('{"p": 5}', (key, value) =>
+
JSON.parse('{"p": 5}', (key, value) =>
   typeof value === 'number'
     ? value * 2 // 数値ならば値の2倍を返す
     : value     // それ以外ならば変更しない
@@ -178,42 +180,29 @@ JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) =>
 // ""
 
-

JSON.parse() は末尾のカンマを許容しない

+

JSON.parse() は末尾のカンマを許容しない

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

JSON.parse() は単一引用符を許容しない

+

JSON.parse() は単一引用符を許容しない

// SyntaxError が発生
 JSON.parse("{'foo': 1}");
 
-

仕様書

- - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-json.parse', 'JSON.parse')}}
+

仕様書

-

ブラウザーの互換性

+{{Specifications}} - +

ブラウザーの互換性

-

{{Compat("javascript.builtins.JSON.parse")}}

+

{{Compat}}

-

関連情報

+

関連情報

    -
  • {{jsxref("JSON.stringify()")}}
  • +
  • {{jsxref("JSON.stringify()")}}
-- cgit v1.2.3-54-g00ecf