1

私は混乱しています。json.org を引用するには

JSON は、次の 2 つの構造で構築されています。

  • 名前と値のペアのコレクション。さまざまな言語で、これはオブジェクト、レコード、構造体、辞書、ハッシュ テーブル、キー付きリスト、または連想配列として実現されます。
  • 値の順序付きリスト。ほとんどの言語では、これは配列、ベクトル、リスト、またはシーケンスとして実現されます。

したがって、'""' は有効な JSON 文字列である必要はないと思いますが、リスト値 (つまり、'[' で始まらず、']' で終わる) ではありませんが、JSON.parse は例外を与えず、戻ります空の文字列。

有効な JSON 文字列ですか。

4

3 に答える 3

4

""だから、私は有効なJSON文字列であるべきではないと思います

これは有効なJSON文字列です(JSONテキストに表示される可能性のあるデータ型です)。

どちらもリスト値ではないため(つまり、「[」で始まり、「]」で終わる)

JSONテキスト(つまり、完全なJSONドキュメント)は、(最も外側のレベルで)オブジェクトまたは配列のいずれかである必要があります。文字列は有効なJSONテキストではありません。

正式な仕様は次のように述べています。

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

しかし、ここで質問を引用することに戻ります:

ただし、JSON.parseは例外を発生せず、空の文字列を返します。

使用しているJSONパーサーは過度にリベラルです。すべてのJSONパーサーがそうなると思い込まないでください。

たとえば、実行すると次のperl -MJSON -E'say decode_json(q{""})'ようになります。

JSONテキストは、オブジェクトまたは配列である必要があります(ただし、数値、文字列、true、false、またはnullが見つかりました。これを許可するには、allow_nonrefを使用してください)。

于 2013-03-10T18:05:18.527 に答える
4

いいえ、有効な JSONで''はありません。JSON.parse('') エラーをスローします。ブラウザのコンソールを見てください。

次回、「これは有効な JSON ですか?」質問がある場合は、JSON バリデーターを実行するだけです。それが彼らが存在する理由です。

于 2013-03-10T17:58:15.053 に答える