JSON prend en charge les structures de données suivantes (équivalents Java): Scalar, Array / List et Map.
A Set
n'est pas pris en charge prêt à l'emploi dans JSON.
J'ai pensé à plusieurs façons de représenter un ensemble en JSON:
[1] - En liste
Cependant, une liste a son propre ordre, donc les deux listes suivantes, ["a", "b"]
et ["b", "a"]
ne sont pas égales en tant que listes, mais elles doivent être égales en tant qu'ensembles.
[2] - Comme une carte
Utilisez le jeu de clés de la carte et ignorez les valeurs.
Mais encore une fois, en utilisant la comparaison standard, les deux ne sont pas les mêmes que les cartes:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Comme une carte, avec une valeur spéciale
Prenez un scalaire, dites 0
ou null
et forcez-le à être la valeur de chaque clé de la carte:
{"a": 0, "b": 0}
De cette façon, sous les outils de comparaison standard, les objets sont égaux, même si l'ordre des clés est modifié.
Cependant, cette technique pollue le document JSON avec des données non pertinentes.
[4] - En tant que liste ordonnée
Revenons à la première suggestion, mais cette fois sous forme de liste ordonnée. Ce type de solution résout le problème de comparaison.
Cependant, nous devons également garder à l'esprit la complexité du tri, et aussi que la notation de carte gère les doublons, contrairement à une liste triée. Exemple:
{"a": 400, "a": 9}
est traité comme {"a": 9}
, mais le ["g", "g"]
serait toujours ["g", "g"]
.
Cela dit, il me semble que la notation de liste est plus claire, mais la notation de carte est plus robuste à la duplication de clés et rend plus difficile la cohérence de la valeur spéciale (même si cela null
semble être un bon choix pour cela).
Qu'est-ce que tu penses? Comment représenteriez-vous un ensemble en JSON?
PS
Notez que cette question concerne simplement JSON. Je sais que d'autres formats, comme yaml, sont disponibles. Encore...