Pubblicare e rispondere perché ci sono molte idee obsolete e confusione sugli standard. A dicembre 2017, ci sono due standard concorrenti:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
json.org suggerisce che ECMA-404 è lo standard, ma questo sito non sembra essere un'autorità. Mentre penso che sia giusto considerare ECMA l'autorità, ciò che è importante qui è, l'unica differenza tra le norme (in materia di chiavi univoche) è che RFC 8259 dice che le chiavi dovrebbero essere unico, e l'ECMA-404 dice che sono non sono necessari per essere unico.
RFC-8259:
"I nomi all'interno di un oggetto DOVREBBERO essere univoci."
La parola "dovrebbe" in maiuscolo, ha un significato all'interno del mondo RFC, che è specificamente definito in un altro standard (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ) come,
- DOVREBBE Questa parola, o l'aggettivo "RACCOMANDATO", significa che possono esistere ragioni valide in circostanze particolari per ignorare un particolare elemento, ma le implicazioni complete devono essere comprese e ponderate attentamente prima di scegliere un corso diverso.
ECMA-404:
"La sintassi JSON non impone alcuna restrizione alle stringhe utilizzate come nomi, non richiede che le stringhe di nomi siano univoche e non assegna alcun significato all'ordinamento delle coppie nome / valore."
Quindi, indipendentemente da come lo tagli, è JSON sintatticamente valido .
Il motivo fornito per la raccomandazione chiave unica in RFC 8259 è,
Un oggetto i cui nomi sono tutti univoci è interoperabile, nel senso che tutte le implementazioni software che ricevono quell'oggetto saranno d'accordo sulle mappature nome-valore. Quando i nomi all'interno di un oggetto non sono univoci, il comportamento del software che riceve tale oggetto è imprevedibile. Molte implementazioni riportano solo la coppia cognome / valore. Altre implementazioni riportano un errore o non riescono ad analizzare l'oggetto e alcune implementazioni riportano tutte le coppie nome / valore, inclusi i duplicati.
In altre parole, dal punto di vista di RFC 8259, è valido ma il tuo parser potrebbe fallire e non ci sono promesse su quale valore, se presente, verrà associato a quella chiave. Dal punto di vista dell'ECMA-404 (che prenderei personalmente come autorità), è valido, punto. Per me questo significa che qualsiasi parser che rifiuta di analizzarlo è rotto. Dovrebbe almeno analizzare secondo entrambi questi standard. Ma il modo in cui viene trasformato nel tuo oggetto nativo di scelta è, in ogni caso, chiavi uniche o no, completamente dipendente dall'ambiente e dalla situazione, e nulla di tutto ciò è nello standard per cominciare.
Dictionary<string, string>