Alle Artikel

JSON Sort Keys: warum Objektschlüssel sortieren

Die JSON-Spezifikation legt die Reihenfolge der Schlüssel in einem Objekt formal nicht fest — {"a": 1, "b": 2} und {"b": 2, "a": 1} stellen dieselben Daten dar. In der Praxis spielt die Schlüsselreihenfolge aber trotzdem oft eine Rolle, sowohl für Menschen als auch für Tools, die mit diesen Daten arbeiten.

Warum Schlüssel sortieren

  • Diffing. Wenn zwei JSON-Dokumente mit identischen Daten unterschiedliche Schlüsselreihenfolgen haben, zeigt ein Text-Diff einen falschen Unterschied. Sortierung beseitigt dieses Problem.
  • Deterministische Ausgabe. Wird dasselbe Objekt mehrfach serialisiert (etwa um einen Hash oder Cache-Schlüssel zu erzeugen), garantieren sortierte Schlüssel jedes Mal dasselbe Ergebnis.
  • Lesbarkeit. Ein alphabetisch sortiertes Objekt lässt sich leichter überfliegen und ein bestimmtes Feld darin finden, besonders bei großen Strukturen.

Rekursives Sortieren

Damit das Ergebnis vorhersehbar ist, wird die Sortierung meist rekursiv angewendet — nicht nur auf die Schlüssel der obersten Ebene, sondern auf die Schlüssel aller verschachtelten Objekte auf beliebiger Tiefe. Die Reihenfolge der Elemente in Arrays bleibt dabei unverändert, da bei Arrays die Elementreihenfolge ein bedeutungsvoller Teil der Daten ist.

Wann man das nicht braucht

Wenn das JSON nur von einem Programm verarbeitet wird (nicht von einem Menschen oder einem Diff-Tool), bringt das Sortieren der Schlüssel meist keinen praktischen Vorteil — Parser lesen ein Objekt unabhängig von der Feldreihenfolge gleich.

DIN 5007: zwei offizielle Antworten auf die Frage, wie ü sortiert wird

Für deutsche Umlaute gibt es keine einzige "richtige" Sortierregel, sondern die Norm DIN 5007 definiert zwei Varianten: Variante 1 behandelt ä, ö, ü wie ihre Grundbuchstaben a, o, u (klassische Wörterbuch-Sortierung), während Variante 2 sie so behandelt, als stünde dort ae, oe, ue (Telefonbuch-Sortierung, damit z. B. "Müller" neben "Mueller" einsortiert wird). Ein einfacher Byte- bzw. Codepoint-Vergleich folgt keiner von beiden — er setzt ü als eigenständiges Zeichen weit hinter z ein, was weder der einen noch der anderen deutschen Konvention entspricht. Das ß sortiert traditionell wie ss.

Sortierung und Locale

Die alphabetische Sortierung von Schlüsseln, die nicht nur lateinische Zeichen enthalten, hängt davon ab, ob Zeichen byteweise (nach Unicode-Codepoint) oder unter Berücksichtigung sprachlicher Regeln (locale-aware collation) verglichen werden. Ein byteweiser Vergleich stellt zum Beispiel Großbuchstaben unabhängig vom Alphabet vor Kleinbuchstaben, während eine Sortierung mit Locale-Bezug die Schlüssel anders anordnen kann.

Tool ausprobieren