web-dev-qa-db-ja.com

JSON番号を引用できますか?

JSON番号を引用符で囲むことはできますか?ほとんどの検索リンクでは、数字は引用符を「必要としない」ようです。しかし、パーサーは_"attr" : 6_と_"attr" : "6"_の両方を受け入れるべきですか?

MyParserにメソッドgetIntがあり、キーを指定して数値を取得する場合、両方の場合にMyParser.getInt("attr")が_6_を返すか、後者の場合に例外をスローする必要があります?

36
Unreal user

[〜#〜] json [〜#〜] では、6は6番です。 "6"は、digit6を含むstringです。質問への答え「json番号は引用できますか?」は基本的に「いいえ」です。引用符で囲むと、もう数字。

しかし、パーサーは "attr":6とattr: "6"の両方を受け入れるべきですか?

attrは引用符で囲む必要があるため、2番目の例は無効です。例:

{"attr": "6"}

...は有効であり、attrというプロパティを持つオブジェクトをstring"6"で定義します。

{"attr": 6}

...は有効であり、number6attrと呼ばれるプロパティを持つオブジェクトを定義し、最後に:

{attr: 6}

...そして

{attr: "6"}

...プロパティ名は二重引用符で囲む必要があるため、どちらも無効なJSONです。

MyParserにキーを指定して番号を取得するメソッドgetIntがある場合、MyParser.getInt( "attr")は両方のケースで6を返すか、後者のケースで例外をスローする必要がありますか?

これは、パーサーを提供する人の設計上の決定です。基本的に、getIntは厳密("attr": "6"で試すと例外をスロー)または緩い("6"6に強制して返す)の選択です。 JavaScriptは通常ルーズであるため、ルーズであるという議論があるかもしれません。逆に、JavaScriptがルーズであるという事実は、問題を引き起こすことがあり、これは厳格であることの議論になり得ます。

72
T.J. Crowder

プログラミング言語が文字列からintへの暗黙的な変換を提供しない場合、問題が発生する可能性があるため、整数を取得するために使用する言語に依存します。

最近のプログラミング言語では、コードを追加せずに文字列を暗黙的に数値に変換できるため、あまり心配する必要はありません。 JavaScriptなどのプログラミング言語を使用する場合、==および===値を比較する場合、===は値のタイプを考慮に入れ、==そうではないので、6 === "6"falseを返しますが、6 == "6"trueを返します。

質問に答えると、文字列からintへの暗黙的な変換を提供するプログラミング言語を使用している場合、例外はスローされません。

4
scubaFun