[解決済み】JSONの構文では、オブジェクト内のキーの重複は許されるのか?
質問
これは有効なjsonですか?
{
"a" : "x",
"a" : "y"
}
http://jsonlint.com/ は「はい」と答える。
http://www.json.org/ は、禁止されているとは一言も書いていない。
しかし、明らかにあまり意味がありませんよね? ほとんどの実装はハッシュテーブルを使っているでしょうから、いずれにせよオーバーライドされているのです。
どのように解決するのか?
から 規格書(P.2) :
他の規格もこれを参考にし、JSONのテキスト形式を厳密に守りながら は、様々なエンコーディングの詳細について制限を課している。そのような規格は、特定の動作を要求するかもしれません。JSON は動作を規定しない。
規格のさらに下(P.2)に、JSONオブジェクトの仕様があります。
オブジェクトの構造は、0個以上の名前と値のペアを囲む中括弧トークンの組として表現されます。 名前は文字列である。それぞれの名前の後には1つのコロン・トークンが続き、名前と値を分離します。1つの コンマ・トークンは、次の名前と値を分離する。
<イグ
重複キーが無効か有効かについては言及されていませんので、仕様によれば、重複キーは許可されているということだと考えて差し支えないでしょう。
JSON ライブラリのほとんどの実装がそうであること ない は、重複したキーを受け入れても、最初の引用文のおかげで、標準と衝突することはありません。
C++の標準ライブラリに関連する例を2つ紹介します。あるJSONオブジェクトをデシリアライズする際に
std::map
は、キーの重複を拒否するのが理にかなっています。しかし、あるJSONオブジェクトをデシリアライズする際に
std::multimap
の場合、重複するキーを通常通り受け入れるのが理にかなっています。
関連
-
[解決済み] 文字列のJSON配列はどのように表現するのですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み] JSオブジェクトをJSON文字列に変換する
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] JSONオブジェクトをTypeScriptのクラスにキャストする方法を教えてください。
-
[解決済み】BulbapediaのようなカスタムWikiでWikipedia APIを使用する場合
-
[解決済み】JSONの構文では、オブジェクト内のキーの重複は許されるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] VSCodeでlaunch.jsonに環境変数を追加する方法
-
[解決済み] JSONPathで文字列によるフィルタリングを行うには?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] npmインストール時にpackage.jsonにコメントを追加するにはどうすればよいですか?
-
[解決済み】TypeScriptでJSONファイルを取り込む
-
[解決済み】JSONの構文では、オブジェクト内のキーの重複は許されるのか?
-
[解決済み】curlのためにJSONファイル経由でペイロードを渡すには?
-
[解決済み】構造体からフィールドを削除したり、JSONレスポンスでフィールドを隠したりする方法
-
[解決済み】HTTPの "406-Not Acceptable Response "とは何ですか?
-
[解決済み】bashスクリプトの関数で定義された変数でcurlのPOSTを使用する。