1. ホーム
  2. javascript

[解決済み] 有効なJSONの最小値は?

2022-02-05 22:33:51

質問

JSONの記述をよく読んでみると http://json.org/ が、素朴な疑問に対する答えがわからない。どのような文字列が最小限の有効なJSONとなるのでしょうか?

  • "string" は有効なJSONか?
  • 42 は有効なJSONか?
  • true は有効なJSONか?
  • {} は、空のオブジェクトが有効なJSONであるか?
  • [] 空の配列は有効なJSONか?

解決方法は?

執筆時点では、JSONはもっぱら RFC4627 . これは、JSONテキストがシリアル化されたオブジェクトまたは配列であることを("2"の冒頭で)記述しています。

これは、次のことを意味します。 のみ {}[] は、この規格に準拠したパーサーや文字列化器において、有効で完全なJSON文字列です。

しかし しかし、ECMA-404の導入はそれを変え、更新されたアドバイス はこちらからご覧いただけます。 . また ブログ記事 この問題について


しかし、さらに問題を混乱させるのが JSON オブジェクト(例えば JSON.parse()JSON.stringify() ) ウェブブラウザで利用できるのは ES5で標準化された というように、許容されるJSONテキストを明確に定義しています。

この仕様で使用されるJSON交換フォーマットは、2つの例外を除き、RFC4627で記述されたものと全く同じです。

  • ECMAScript JSON 文法のトップレベル JSONText プロダクションは、RFC4627 で規定されている JSONObject または JSONArray に限定されるのではなく、任意の JSONValue で構成することができる。

  • 欠けた

ということになります。 すべて JSONオブジェクトは技術的にはRFC4627に準拠していますが、JSON値(文字列、ヌル、数字を含む)はJSONオブジェクトに受け入れられます。

したがって、適合するブラウザで数値を文字列化するには JSON.stringify(5) しかし、RFC4627 を遵守している他のパーサーでは拒否されます。ただし、上記のような特定の例外はありません。例えばルビー は、そのような例の1つであるように思われます。 だけ は、オブジェクトや配列をルートとして受け入れます。 . 一方、PHPは は、特に例外を追加します。 スカラー型とNULLのエンコードとデコードも行うということです。