JSON admite las siguientes estructuras de datos (equivalentes de Java): escalar, matriz / lista y mapa.
A Set
no es compatible de fábrica en JSON.
Pensé en varias formas de representar un conjunto en JSON:
[1] - Como una lista
Sin embargo, una lista tiene su propio pedido, por lo que las dos listas siguientes, ["a", "b"]
y ["b", "a"]
no son iguales como listas, sino que debe ser igual como conjuntos.
[2] - Como un mapa
Use el conjunto de claves del mapa e ignore los valores.
Pero nuevamente, usando la comparación estándar, los dos no son lo mismo que los mapas:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Como un mapa, con un valor especial
Tome un escalar, diga 0
o null
y fuerce a que sea el valor de cada clave del mapa:
{"a": 0, "b": 0}
De esta manera, bajo las herramientas de comparación estándar, los objetos son iguales, incluso si se cambia el orden de las claves.
Sin embargo, esta técnica contamina el documento JSON con datos irrelevantes.
[4] - Como una lista ordenada
Volver a la primera sugerencia, pero esta vez como una lista ordenada. Este tipo de resuelve el problema de comparación.
Sin embargo, también debemos tener en cuenta la complejidad de la ordenación, y también que la notación de mapa maneja duplicados, mientras que una lista ordenada no lo hace. Ejemplo:
{"a": 400, "a": 9}
se maneja como {"a": 9}
, pero ["g", "g"]
siempre lo sería ["g", "g"]
.
Habiendo dicho todo eso, me parece que la notación de la lista es más clara, pero la notación del mapa es más robusta para la duplicación de claves y hace que sea más difícil ser coherente con el valor especial (aunque null
parezca una buena opción para eso).
¿Qué piensas? ¿Cómo representaría un conjunto en JSON?
PD
Tenga en cuenta que la pregunta se trata simplemente de JSON. Sé que otros formatos, como yaml, están disponibles. Todavía...