Alle Artikel

JSON Flatten: eine verschachtelte Struktur in eine flache Liste verwandeln

Verschachtelte Objekte und Arrays eignen sich gut, um Struktur abzubilden, sind aber unpraktisch, wo eine flache Liste von Schlüssel-Wert-Paaren gebraucht wird — in Tabellenkalkulationen, Logzeilen oder Übersetzungsdateien. Flatten löst genau diesen Widerspruch.

Wie es funktioniert

Jedes verschachtelte Feld wird zu einer Zeile, wobei der Schlüssel der vollständige Pfad zum Wert ist (mit Punkten oder Indizes in eckigen Klammern) und der Wert der eigentliche Wert bleibt. {"benutzer": {"adresse": {"stadt": "Berlin"}}} wird zum Paar benutzer.adresse.stadt → "Berlin". Array-Elemente erhalten einen Index im Pfad, etwa items[0].name.

Wo das vorkommt: Übersetzungsdateien (i18n)

Flache Schlüssel mit Punktnotation sind das Standardformat für Lokalisierungsdateien in Bibliotheken wie i18next oder vue-i18n — settings.profile.title statt eines verschachtelten JSON-Baums. Übersetzungsplattformen und tabellenkalkulationsbasierte Workflows erwarten fast immer diese flache Form, daher ist das Flatten einer verschachtelten Sprachdatei oft der erste Schritt, bevor sie an Übersetzer geht.

Wofür das in der Praxis gebraucht wird

  • Verschachtelte API-Daten in eine Tabellenkalkulation oder eine flache Datenbanktabelle importieren.
  • Einen zeilenweisen Vergleich zweier komplexer Objekte überhaupt lesbar machen.
  • Einen bestimmten Wert in einem stark verschachtelten JSON schnell finden, indem der vollständige Pfad auf einen Blick sichtbar wird.

Die Umkehrung: unflatten

Die verschachtelte Struktur aus der flachen Liste wiederherzustellen bedeutet, jeden Schlüssel in seine Pfadsegmente zu zerlegen (anhand von Punkten und Indizes in Klammern) und dabei schrittweise verschachtelte Objekte und Arrays aufzubauen. Mehrdeutig wird es, wenn ein Pfad zweierlei bedeuten kann — enthalten die Daten sowohl einen wörtlichen Schlüssel "a.b" als auch einen verschachtelten Pfad a.b, kann unflatten nicht erraten, was gemeint war, und meldet einen Konflikt, statt still etwas zu überschreiben.

Tool ausprobieren