JSON unterstützt die folgenden Datenstrukturen (Java-Äquivalente): Skalar, Array / Liste und Map.
A Set
wird in JSON nicht sofort unterstützt.
Ich habe über verschiedene Möglichkeiten nachgedacht, eine Menge in JSON darzustellen:
[1] - Als Liste
Allerdings ist eine Liste hat seine eigene Ordnung, so die folgenden zwei Listen, ["a", "b"]
und ["b", "a"]
ist nicht gleich als Listen, aber sie sollten als Sätze gleich sein.
[2] - Als Karte
Verwenden Sie den Schlüsselsatz der Karte und ignorieren Sie die Werte.
Beim Standardvergleich sind die beiden jedoch nicht mit Karten identisch:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Als Karte mit einem besonderen Wert
Nehmen Sie einen Skalar, sagen Sie 0
oder, null
und erzwingen Sie, dass er der Wert jedes Schlüssels in der Karte ist:
{"a": 0, "b": 0}
Auf diese Weise sind unter Standardvergleichstools die Objekte gleich, auch wenn die Schlüsselreihenfolge geändert wird.
Diese Technik verschmutzt jedoch das JSON-Dokument mit irrelevanten Daten.
[4] - Als geordnete Liste
Zurück zum ersten Vorschlag, diesmal jedoch als geordnete Liste. Diese Art löst das Vergleichsproblem.
Wir sollten jedoch auch die Komplexität der Sortierung berücksichtigen und auch, dass die Kartennotation Duplikate behandelt, während dies bei einer sortierten Liste nicht der Fall ist. Beispiel:
{"a": 400, "a": 9}
wird so behandelt {"a": 9}
, ["g", "g"]
wäre es aber immer ["g", "g"]
.
Abgesehen davon scheint mir die Listennotation klarer zu sein, aber die Map-Notation ist robuster gegenüber der Duplizierung von Schlüsseln und erschwert es, in Bezug auf den speziellen Wert konsistent zu sein (obwohl dies null
eine gute Wahl zu sein scheint).
Was denkst du? Wie würden Sie eine Menge in JSON darstellen?
PS
Beachten Sie, dass es sich bei dieser Frage lediglich um JSON handelt. Ich weiß, dass andere Formate wie Yaml verfügbar sind. Immer noch...