JSON supporta le seguenti strutture dati (equivalenti Java): Scalare, Array / Elenco e Mappa.
Un Set
non è supportato immediatamente in JSON.
Ho pensato a diversi modi per rappresentare un set in JSON:
[1] - Come elenco
Tuttavia, un elenco ha il proprio ordine, quindi i seguenti due elenchi, ["a", "b"]
e ["b", "a"]
non sono uguali come elenchi, ma dovrebbero essere uguali come insiemi.
[2] - Come una mappa
Utilizza il set di chiavi della mappa e ignora i valori.
Ma di nuovo, 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, diciamo 0
o null
e impone che sia 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'ordine delle chiavi è cambiato.
Tuttavia, questa tecnica inquina il documento JSON con dati irrilevanti.
[4] - Come elenco ordinato
Torna al primo suggerimento, ma questa volta come lista ordinata. Questo tipo di soluzione risolve il problema di confronto.
Tuttavia, dovremmo anche ricordare la complessità dell'ordinamento e anche che la notazione della mappa gestisce i duplicati, mentre un elenco ordinato non lo fa. Esempio:
{"a": 400, "a": 9}
è gestito come {"a": 9}
, ma ["g", "g"]
sarà sempre ["g", "g"]
.
Detto questo, mi sembra che la notazione delle liste sia più chiara, ma la notazione della mappa è più solida alla duplicazione delle chiavi e rende più difficile essere coerenti con il valore speciale (anche se null
sembra un buona scelta per questo).
Che ne pensi? Come rappresenteresti un set in JSON?
P.S.
Da notare che questa domanda riguarda semplicemente JSON. So che altri formati, come yaml, sono disponibili. Ancora ...