Publication et réponse car il y a beaucoup d'idées obsolètes et de confusion sur les normes. En décembre 2017, il y avait deux normes concurrentes:
RFC 8259 - https://tools.ietf.org/html/rfc8259
ECMA-404 - http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
json.org suggère que l'ECMA-404 est la norme, mais ce site ne semble pas être une autorité. Bien que je pense qu'il est juste de considérer l'ECMA comme l'autorité, ce qui est important ici, c'est que la seule différence entre les normes (concernant les clés uniques) est que la RFC 8259 dit que les clés doivent être uniques, et l'ECMA-404 dit qu'elles ne sont pas tenues d'être unique.
RFC-8259:
"Les noms dans un objet DEVRAIENT être uniques."
Le mot "devrait" dans toutes les majuscules comme ça, a une signification dans le monde RFC, qui est spécifiquement définie dans une autre norme (BCP 14, RFC 2119 - https://tools.ietf.org/html/rfc2119 ) comme,
- DEVRAIT Ce mot, ou l'adjectif "RECOMMANDÉ", signifie qu'il peut exister des raisons valables dans des circonstances particulières d'ignorer un élément particulier, mais toutes les implications doivent être comprises et soigneusement pesées avant de choisir un cours différent.
ECMA-404:
"La syntaxe JSON n'impose aucune restriction sur les chaînes utilisées comme noms, n'exige pas que les chaînes de nom soient uniques et n'attribue aucune signification à l'ordre des paires nom / valeur."
Donc, peu importe la façon dont vous le découpez, il s'agit d'un JSON syntaxiquement valide .
La raison donnée pour la recommandation clé unique dans la RFC 8259 est,
Un objet dont les noms sont tous uniques est interopérable dans le sens où toutes les implémentations logicielles recevant cet objet seront d'accord sur les mappages nom-valeur. Lorsque les noms d'un objet ne sont pas uniques, le comportement du logiciel qui reçoit un tel objet est imprévisible. De nombreuses implémentations signalent uniquement la paire nom / valeur. D'autres implémentations signalent une erreur ou ne parviennent pas à analyser l'objet, et certaines implémentations signalent toutes les paires nom / valeur, y compris les doublons.
En d'autres termes, du point de vue RFC 8259, c'est valide mais votre analyseur peut aboyer et il n'y a aucune promesse quant à la valeur, le cas échéant, qui sera associée à cette clé. Du point de vue ECMA-404 (que je considérerais personnellement comme l'autorité), c'est valable, point final. Pour moi, cela signifie que tout analyseur qui refuse de l'analyser est brisé. Il doit au moins analyser selon ces deux normes. Mais la façon dont il devient votre objet natif de choix est, en tout cas, des clés uniques ou non, complètement dépendantes de l'environnement et de la situation, et rien de tout cela n'est dans la norme pour commencer.
Dictionary<string, string>