JSON supporta le seguenti strutture di dati (equivalenti Java): scalare, matrice / elenco e mappa.
A Set
non è supportato immediatamente in JSON.
Ho pensato a diversi modi per rappresentare un set in JSON:
[1] - Come elenco
Tuttavia, un elenco ha un proprio ordinamento, quindi i seguenti due elenchi ["a", "b"]
e ["b", "a"]
non sono uguali come elenchi, ma dovrebbero essere uguali come set.
[2] - Come una mappa
Utilizzare il set di chiavi della mappa e ignorare i valori.
Ma ancora una volta, usando il confronto standard, i due non sono gli stessi delle mappe:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Come una mappa, con un valore speciale
Prendi uno scalare, dì 0
o null
e forzalo ad essere il valore di ogni chiave nella mappa:
{"a": 0, "b": 0}
In questo modo, con gli strumenti di confronto standard, gli oggetti sono uguali, anche se l'ordinamento delle chiavi viene modificato.
Tuttavia, questa tecnica inquina il documento JSON con dati irrilevanti.
[4] - Come un elenco ordinato
Torna al primo suggerimento, ma questa volta come un elenco ordinato. Questo tipo di risolve il problema del confronto.
Tuttavia, dovremmo anche tenere presente la complessità dell'ordinamento e anche che la notazione della mappa gestisce i duplicati, mentre un elenco ordinato no. Esempio:
{"a": 400, "a": 9}
è gestito come {"a": 9}
, ma lo ["g", "g"]
sarebbe sempre ["g", "g"]
.
Detto questo, mi sembra che la notazione dell'elenco sia più chiara, ma la notazione della mappa è più robusta per la duplicazione delle chiavi e rende più difficile essere coerenti con il valore speciale (anche se null
sembra una buona scelta per questo).
Cosa ne pensi? Come rappresenteresti un set in JSON?
PS
Si noti che questa domanda riguarda solo JSON. So che sono disponibili altri formati, come Yaml. Ancora...