Posten und Antworten, weil es viele veraltete Ideen und Verwirrung über die Standards gibt. Ab Dezember 2017 gibt es zwei konkurrierende Standards:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
json.org schlägt vor, dass ECMA-404 der Standard ist, aber diese Seite scheint keine Autorität zu sein. Während ich es ist fair zu betrachten ECMA die Autorität denke, was hier wichtig ist, ist der einzige Unterschied zwischen den Standards ( in Bezug auf eindeutige Schlüssel) , dass RFC 8259 sagt der Schlüssel sollte eindeutig sein, und die ECMA-404 sagt , sie sind nicht erforderlich sein , einzigartig.
RFC-8259:
"Die Namen innerhalb eines Objekts sollten eindeutig sein."
Das Wort "sollte" in allen Großbuchstaben hat eine Bedeutung innerhalb der RFC-Welt, die in einem anderen Standard (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ) als definiert ist.
- SOLLTE Dieses Wort oder das Adjektiv "EMPFOHLEN" bedeuten, dass es unter bestimmten Umständen gültige Gründe geben kann, einen bestimmten Gegenstand zu ignorieren, aber die vollständigen Auswirkungen müssen verstanden und sorgfältig abgewogen werden, bevor ein anderer Kurs gewählt wird.
ECMA-404:
"Die JSON-Syntax legt keine Einschränkungen für die als Namen verwendeten Zeichenfolgen fest, erfordert nicht, dass Namenszeichenfolgen eindeutig sind, und weist der Reihenfolge der Name / Wert-Paare keine Bedeutung zu."
Egal wie Sie es schneiden, es ist syntaktisch gültiges JSON .
Der Grund für die eindeutige Schlüsselempfehlung in RFC 8259 ist:
Ein Objekt, dessen Namen alle eindeutig sind, ist in dem Sinne interoperabel, dass alle Softwareimplementierungen, die dieses Objekt empfangen, sich auf die Namens-Wert-Zuordnungen einigen. Wenn die Namen innerhalb eines Objekts nicht eindeutig sind, ist das Verhalten von Software, die ein solches Objekt empfängt, nicht vorhersehbar. Viele Implementierungen melden nur das Nachname / Wert-Paar. Andere Implementierungen melden einen Fehler oder können das Objekt nicht analysieren, und einige Implementierungen melden alle Name / Wert-Paare, einschließlich Duplikate.
Mit anderen Worten, aus Sicht von RFC 8259 ist es gültig, aber Ihr Parser kann barf und es gibt kein Versprechen, welcher Wert, falls vorhanden, mit diesem Schlüssel gepaart wird. Aus der Sicht von ECMA-404 (die ich persönlich als Autorität betrachten würde) ist dies gültig. Für mich bedeutet dies, dass jeder Parser, der sich weigert, ihn zu analysieren, kaputt ist. Es sollte zumindest nach diesen beiden Standards analysiert werden. Aber wie es zu einem nativen Objekt Ihrer Wahl wird, hängt auf jeden Fall von eindeutigen Schlüsseln ab oder nicht, die vollständig von der Umgebung und der Situation abhängen, und nichts davon ist zunächst im Standard enthalten.
Dictionary<string, string>