O JSON suporta as seguintes estruturas de dados (equivalentes Java): Escalar, Matriz / Lista e Mapa.
A Set
não é suportado imediatamente no JSON.
Pensei em várias maneiras de representar um conjunto em JSON:
[1] - Como uma lista
No entanto, uma lista tem sua própria ordem, portanto, as duas listas a seguir, ["a", "b"]
e ["b", "a"]
não são iguais a listas, mas devem ser iguais a conjuntos.
[2] - Como um mapa
Use o conjunto de chaves do mapa e ignore os valores.
Mas, novamente, usando a comparação padrão, os dois não são iguais aos mapas:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Como um mapa, com um valor especial
Pegue um escalar, diga 0
ou null
e force-o a ser o valor de cada chave no mapa:
{"a": 0, "b": 0}
Dessa forma, nas ferramentas de comparação padrão, os objetos são iguais, mesmo que a ordem das teclas seja alterada.
No entanto, essa técnica polui o documento JSON com dados irrelevantes.
[4] - Como uma lista ordenada
Voltar para a primeira sugestão, mas desta vez como uma lista ordenada. Isso meio que resolve o problema de comparação.
No entanto, também devemos ter em mente a complexidade da classificação e também que a notação de mapa lida com duplicatas, enquanto uma lista classificada não. Exemplo:
{"a": 400, "a": 9}
é tratado como {"a": 9}
, mas ["g", "g"]
sempre seria ["g", "g"]
.
Dito tudo isso, parece-me que a notação da lista é mais clara, mas a notação do mapa é mais robusta à duplicação de chaves e dificulta a coerência com o valor especial (embora null
pareça uma boa opção para isso).
O que você acha? Como você representaria um conjunto em JSON?
PS
Observe que a pergunta é apenas sobre JSON. Eu sei que outros formatos, como o yaml, estão disponíveis. Ainda...