20

次の JSON テキストは有効ですか?それとも最上位の値は配列またはオブジェクトでなければなりませんか?

4.0
"Hello World"
true

関連する過去の質問 (有効な JSON の最小値は何ですか?など)。、およびこの単純な文字列は有効な JSON と見なされますか? ではないという結論に達しました。これは、 RFC-4627の JSON 形式の説明に基づいており、次のように述べられています。

2. JSON 文法

JSON テキストは一連のトークンです。トークンのセットには、6 つの構造文字、文字列、数字、および 3 つのリテラル名が含まれます。

JSON テキストは、シリアル化されたオブジェクトまたは配列です。

 JSON-text = object / array

これらは、6 つの構造的特徴です。

[...]

ただし、RFC-4627 ステータスでは、「いかなる種類のインターネット標準も指定しない」と宣言されています。代わりに、JSON の公式標準は、最近公開されたECMA-404です。RFC-4627 とは異なり、ECMA-404 の有効な JSON テキストの説明には、オブジェクトまたは配列であるという要件は含まれていません。たとえば、上記の引用に最も似ているセクションには、その要件がありません。

4 JSON テキスト

JSON テキストは、JSON 値の文法に準拠する Unicode コード ポイントから形成された一連のトークンです。トークンのセットには、6 つの構造トークン、文字列、数字、および 3 つのリテラル名トークンが含まれます。

6 つの構造トークン:

[...]

この新しい仕様を考えると、エンコードされた非配列の非オブジェクトのトップレベル値は有効な JSON テキストと見なされますか?

4

1 に答える 1

31

Douglas Crockford は、この Google+の投稿にコメントを投稿しました。

JSON は単なる文法であり、文法には数値と文字列が含まれます。JSON の使用は必然的により制限的でなければなりません。RFC-4627 は考えられる用途の 1 つですが、JSON 自体の標準になることを意図したものではありませんでした。

application/jsonRFC-4627 に従って、非配列、非オブジェクトの JSON テキストが一般的に無効であるとは言えません。インターネット メディア タイプでそれらを使用することは有効ではありません。

非オブジェクト非配列値の表現は、「JSON 仕様」として識別される可能性のある現在公開されている唯一の標準である ECMA-404 ごとの有効な JSON テキストです。

ただし、IETF は、JSON の仕様である RFC-4627 の代替案を間もなく公開する可能性が高いことが判明しました。その最新のドラフトにはまだ JSON テキストの制限が含まれていますが、JSON がいくつかの場所で指定されており、これらの仕様がわずかに異なることにも言及しています。草案では、ECMA-262 (ECMAScript/JavaScript 仕様) の JSON の定義がトップレベルの値制限を共有していないことが明確に言及されています。

したがって、非オブジェクト非配列が有効な JSON テキストであるかどうかの問題は、明確にする必要があります。

"hello"RFC-4627 およびその後継で指定されている有効な JSON テキストですか?

いいえ。

"hello"ECMA-404 および ECMA-262 で指定されている有効な JSON テキストですか?

はい。

于 2013-10-24T15:50:01.890 に答える