Json To Csv LogoJson To Csv

Verschachteltes JSON in CSV umwandeln: Was der Schalter wirklich tut (Anleitung 2026)

Flachlegen verwandelt verschachteltes JSON in tabellenförmige Zeilen: Objekte werden zu Spalten in Punktnotation, Listen werden verbunden oder als Text geschrieben, leere Werte folgen exakten Regeln. So sieht der Schalter aus, Zelle für Zelle, an der echten Engine verifiziert.

Aktualisiert: 2026-10-1311 Min. Lesezeit

Warum sich JSON gegen Flachheit wehrt: Bäume gegen Raster

Ein CSV ist ein Raster: Zeilen und Spalten, jede Zelle ein einzelner flacher Wert. JSON ist ein Baum: Objekte in Objekten, Listen in Objekten, Objekte in Listen. Flachlegen ist die Übersetzung zwischen diesen beiden Formen — und es ist der eine Teil der Konvertierung von JSON nach CSV, bei dem ein Konverter Urteile in Ihrem Namen fällen muss, denn es gibt keine einzige \"korrekte\" Antwort.

Nehmen Sie den einfachsten verschachtelten Datensatz: { \"id\": 1, \"customer\": { \"name\": \"Ana\", \"city\": \"Madrid\" } }. Ein Raster hat keine Möglichkeit, einen \"customer\" zu halten, der zwei Dinge enthält. Also muss der Konverter wählen: customer eine eigene Spalte geben und das Objekt als Text hineinstopfen, oder das Objekt in die Spalten customer.name und customer.city aufsprengen. Jeder Konverter trifft diese Wahl mit derselben Handvoll Regeln — und sobald Sie diese kennen, können Sie Ihr CSV vorhersagen, bevor Sie überhaupt auf Konvertieren drücken.

Das durchgehende Beispiel, das wir flachlegen

Alles Folgende wird an einer einzigen Datei demonstriert — drei Bestellungen mit drei Verschachtelungsebenen, einer Liste einfacher Werte, einer leeren Liste, einem leeren Objekt, einem Nullwert und einer Liste von Objekten. Wir haben genau diese Datei durch die echte Konverter-Engine dieser Seite laufen lassen (dasselbe JavaScript, das ausgeführt wird, wenn Sie auf Konvertieren drücken), und jede gezeigte Ausgabe ist das, was die Engine tatsächlich erzeugt hat:

orders-nested.json
[
  { "orderId": "A-101", "customer": { "name": "Ana Ruiz", "contact": { "email": "ana@example.com", "city": "Madrid" } }, "items": ["book", "pen"], "tags": [], "meta": {} },
  { "orderId": "A-102", "customer": { "name": "Ken Sato", "contact": { "email": "ken@example.com", "city": "Osaka" } }, "items": ["lamp"], "tracking": [{ "code": "TX-1", "status": "shipped" }, { "code": "TX-2", "status": "pending" }] },
  { "orderId": "A-103", "customer": { "name": "Lina Noor", "contact": { "email": null, "city": "Berlin" } }, "items": ["mug", null, "plate"] }
]

Regel 1: Verschachtelte Objekte werden zu Spalten in Punktnotation

Die erste und wichtigste Regel: Jede Verschachtelungsebene eines Objekts wird zu einem Spaltennamen, wobei die Ebenen durch Punkte verbunden werden. customer.contact.email sind nicht drei Spalten — es ist eine Spalte, deren Name der vollständige Pfad den Baum hinunter ist. Hier ist die tatsächliche Ausgabe der Engine bei eingeschaltetem Flachlegen:

CSV output — flattening ON (verified against the real engine)
orderId,customer.name,customer.contact.email,customer.contact.city,items,tags,meta,tracking
A-101,Ana Ruiz,ana@example.com,Madrid,book; pen,,{},
A-102,Ken Sato,ken@example.com,Osaka,lamp,,,"[{""code"":""TX-1"",""status"":""shipped""},{""code"":""TX-2"",""status"":""pending""}]"
A-103,Lina Noor,,Berlin,mug; ; plate,,,

Die Verschachtelungstiefe selbst hat in der Regel praktisch keine Grenze — wir haben auch ein vierstufiges Objekt getestet ({ a: { b: { c: { d: \"deep\" } } } }), und die Engine hat eine einzige Spalte namens a.b.c.d mit dem Wert deep erzeugt. Die gepunkteten Namen lassen sich in einer Tabelle ganz normal sortieren und filtern; wenn Ihnen customer.contact.city zu lang ist, benennen Sie die Kopfzeilen anschließend einfach in einem Durchgang um.

Regel 2: Listen einfacher Werte werden zu einer Zelle verbunden

Wenn eine Liste nur einfache Werte enthält — Zeichenketten, Zahlen, Wahrheitswerte, Nullwerte —, wird die gesamte Liste zu einer einzigen Zelle zusammengefasst, wobei die Werte mit \"; \" (Semikolon plus Leerzeichen) verbunden werden. Schauen Sie sich die Spalte items oben an: Aus [\"book\", \"pen\"] wurde die einzelne Zelle book; pen, und aus [\"mug\", null, \"plate\"] wurde mug; ; plate — der Nullwert wurde zu einem leeren Segment, nicht zu einem übersprungenen Eintrag.

Zwei praktische Folgen. Erstens: Wenn Sie später ein Semikolon als CSV-Trennzeichen wählen, wird diese zusammengefasste Zelle automatisch in Anführungszeichen gesetzt (\"book; pen\"), damit das Trennzeichen innerhalb der Zelle sie nicht aufspalten kann — die Engine wendet die CSV-Anführungsregeln pro Zelle an, wie im obigen Test verifiziert. Zweitens: Durch das Verbinden geht die Grenzinformation verloren — nach dem Flachlegen ist book; pen Text, keine Liste mehr. Wenn Sie die Einträge wieder in Zeilen aufteilen müssen, lesen Sie Regel 3.

Regel 3: Objektlisten werden zu einer JSON-Text-Zelle

Das ist die Regel, die die meisten überrascht. Wenn eine Liste Objekte enthält — wie das tracking-Array mit seinen { code, status }-Einträgen —, kann sie weder zu Spalten werden (Objekte haben Struktur, nicht nur Werte) noch wie einfache Werte verbunden werden. Also speichert die Engine die gesamte Liste als zitierte JSON-Text-Zelle. Oben enthält die tracking-Spalte für A-102 das vollständige JSON-Array als Text, nach den CSV-Regeln maskiert.

Ist das eine Einschränkung? Ehrlich gesagt: ja, für diese Form. Einen Schalter zur Zeilenerweiterung gibt es in diesem Konverter nicht — er erzeugt niemals eine CSV-Zeile pro Listeneintrag. Wenn Sie tatsächlich eine Zeile pro Tracking-Ereignis brauchen, strukturieren Sie vor dem Konvertieren um: Ziehen Sie das innere Array heraus (konvertieren Sie [{ \"code\": \"TX-1\", \"status\": \"shipped\" }, ...] für sich allein), und Sie erhalten saubere code/status-Zeilen. Eine Spalte mit JSON-Text ist die ehrliche Alternative dazu, stillschweigend Zeilen zu erfinden, die Sie nie verlangt haben.

Regel 4: Leere Werte und Nulls folgen exakten Regeln

Nullwerte und leere Werte sind der Punkt, an dem die meiste \"Warum ist mein CSV komisch\"-Verwirrung beginnt — hier also das verifizierte Verhalten, ohne Rätselraten:

  • Ein Nullwert wird zu einer leeren Zelle. Das email: null bei Lina Noor hat eine leere Zelle unter customer.contact.email erzeugt — kein \"null\"-Text, keine Anführungszeichen.
  • Eine leere Liste wird zu einer leeren Zelle. Das tags: [] bei A-101 hat die Zelle leer gelassen. (Hinweis: Das ist das Verhalten bei eingeschaltetem Flachlegen; bei ausgeschaltetem Flachlegen erscheint dieselbe Liste als wörtlicher Text [].)
  • Ein leeres Objekt wird zum Text {}. Das meta: {} bei A-101 hat eine Zelle mit dem Inhalt {} erzeugt — die Engine hat nichts zum Aufsprengen, also schreibt sie die wörtliche Form des Objekts.
  • Ein Nullwert innerhalb einer Liste wird zu einem leeren verbundenen Segment — mug; ; plate oben — statt übersprungen oder als \"null\" geschrieben zu werden.

Das sind Designentscheidungen, kein universelles Gesetz, aber sie sind konsistent: null bedeutet \"hier ist nichts\", und das CSV sagt nichts.

Flachlegen AN gegen AUS, Byte für Byte

Dieselbe Datei, Flachlegen ausgeschaltet. Jeder Schlüssel der obersten Ebene behält seine eigene Spalte, und verschachtelte Strukturen werden als zitierter JSON-Text gespeichert:

CSV output — flattening OFF (verified against the real engine)
orderId,customer,items,tags,meta,tracking
A-101,"{""name"":""Ana Ruiz"",""contact"":{""email"":""ana@example.com"",""city"":""Madrid""}}","[""book"",""pen""]",[],{},
A-102,"{""name"":""Ken Sato"",""contact"":{""email"":""ken@example.com"",""city"":""Osaka""}}","[""lamp""]",,,"[{""code"":""TX-1"",""status"":""shipped""},{""code"":""TX-2"",""status"":""pending""}]"
A-103,"{""name"":""Lina Noor"",""contact"":{""email"":null,""city"":""Berlin""}}","[""mug"",null,""plate""]",,,

Beachten Sie die Details im Aus-Modus: Die Spalten schrumpfen auf die Schlüssel der obersten Ebene (customer, items, tags, meta, tracking), jeder verschachtelte Wert wird als rohes JSON mit CSV-Anführungszeichenverdopplung geschrieben, und die leere Liste sowie das leere Objekt erscheinen als wörtlicher []- und {}-Text. Aus ist die ehrliche, aber hässliche Darstellung — richtig, wenn Sie die exakte verschachtelte Struktur bewahren müssen (zum Beispiel, bevor Sie Zeilen zurück in ein System einspeisen, das JSON-förmige Felder erwartet). Für die Analyse — Filter, Pivot-Tabellen, Diagramme — ist eingeschaltetes Flachlegen die richtige Wahl, weshalb es die Standardeinstellung ist.

Woher die Zeilen kommen: Arrays, API-Wrapper und JSON Lines

Das Flachlegen entscheidet über die Spalten; etwas anderes entscheidet über die Zeilen. Die Engine schaut sich Ihren Wert auf der obersten Ebene an und folgt drei Fällen:

Fall eins: Ihre oberste Ebene ist ein Array von Objekten — jedes Objekt wird zu einer Zeile. Das ist das Bestellbeispiel oben: drei Objekte, drei Zeilen. Fall zwei: Ihre oberste Ebene ist ein einzelnes Objekt — Sie erhalten eine Zeile. Fall drei ist der nützliche: Ihre oberste Ebene ist ein Objekt, das ein Array umschließt, so wie es API-Antworten tun — { \"data\": [ ... ], \"total\": 2 }. Die Engine erkennt das innere Array (sie prüft gängige Wrapper-Schlüssel wie data, results, users, items) und macht aus jedem Element eine Zeile, wobei die Wrapper-Felder wegfallen. Wir haben das verifiziert: { \"data\": [{ \"a\": 1, \"b\": 2 }, { \"a\": 3, \"b\": 4 }], \"total\": 2 } hat exakt die zwei Datenzeilen mit den Spalten a und b erzeugt — total ist weg.

Eine weitere Eingabeform, die man kennen sollte: Die Engine akzeptiert auch JSON Lines (NDJSON) — ein JSON-Objekt pro Zeile. Wenn Ihr Export aus zehntausend Zeilen statt aus einem großen Array besteht, fügen Sie ihn einfach so ein, wie er ist; er wird auf dieselbe Weise konvertiert.

Unregelmäßige Daten: Fehlende Schlüssel hinterlassen einfach leere Zellen

Echte Exporte sind unregelmäßig: Bestellung A-102 hat tracking, aber kein meta, A-101 hat meta, aber kein tracking, A-103 hat keines von beiden. Die Engine baut die Spaltenliste als Vereinigung aller in jeder Zeile gefundenen Schlüssel auf, der Reihe nach — die Kopfzeile oben hat also alle acht Spalten —, und jede Zeile, der ein Schlüssel fehlt, erhält einfach eine leere Zelle darunter.

Deshalb erscheinen die Kopfzeilen in Einfügereihenfolge (orderId zuerst, dann die zuerst gesehenen verschachtelten Schlüssel) statt in alphabetischer Reihenfolge: Die Spalten folgen der Form Ihrer Daten, so wie die Engine sie durchläuft. Wenn eine spätere Zeile einen brandneuen verschachtelten Pfad einführt, erscheint die Spalte trotzdem — nichts wird stillschweigend weggelassen.

Drei Stolperfallen

Erstens: Schlüssel, die bereits Punkte enthalten. Wenn Ihr JSON sowohl einen wörtlichen Schlüssel \"user.name\" als auch ein verschachteltes user: { name: ... } hat, wollen beide dieselbe Spalte. Wir haben es getestet: Der verschachtelte Wert gewinnt, und der Wert des wörtlichen Schlüssels geht verloren ([{ \"user.name\": \"x\", user: { name: \"y\" } }] hat eine Spalte user.name mit dem Inhalt y erzeugt). Benennen Sie gepunktete Schlüssel vor dem Konvertieren um, wenn beide Werte wichtig sind.

Zweitens: Listen mit gemischten Typen. Eine Liste wie [1, \"a\", { \"b\": 2 }] ist nicht \"lauter Primitive\", also behandelt die Engine sie wie eine Objektliste und schreibt das Ganze als eine JSON-Text-Zelle — obwohl der größte Teil davon einfach war. Halten Sie Listen homogen, wenn Sie das \"; \"-Verbindungsverhalten wollen.

Drittens: Tiefe Verschachtelung ist in Ordnung, aber achten Sie auf die Spaltennamen. Zehn Verschachtelungsebenen ergeben einen zehnteiligen gepunkteten Spaltennamen, der technisch korrekt und praktisch unlesbar ist. Legen Sie alles flach und benennen Sie anschließend die drei Spalten um, die Ihnen wirklich wichtig sind.

Die 30-Sekunden-Checkliste zum Flachlegen

Wenn Sie sich an nichts anderes erinnern: Lassen Sie das Flachlegen für Analysen eingeschaltet und schalten Sie es nur aus, um Struktur zu bewahren; erwarten Sie Spalten in Punktnotation und mit \"; \" verbundene Listen; ziehen Sie Objektlisten heraus und konvertieren Sie sie separat, wenn Sie eine Zeile pro Eintrag brauchen; und behandeln Sie leere Zellen als ehrliche Darstellung von Nullwerten — nicht als Fehler. Der Schalter ist ein Klick, aber jetzt wissen Sie genau, was dieser Klick tut.

Verwandte Anleitungen

Häufige Fragen

Was bedeutet es, verschachteltes JSON für CSV flachzulegen?

Flachlegen ist der Schritt, der verschachteltes JSON in ein flaches Tabellenraster verwandelt: Verschachtelte Objekte werden zu Spalten in Punktnotation (customer.contact.city), Listen einfacher Werte werden mit \"; \" zu einer Zelle verbunden, und Objektlisten werden zu einer einzelnen JSON-Text-Zelle. Ohne Flachlegen werden verschachtelte Werte als roher zitierter JSON-Text in je einer Spalte gespeichert.

Wie lege ich verschachtelte JSON-Objekte als CSV-Spalten flach?

Verwenden Sie einen Konverter mit Flachlege-Option und lassen Sie sie eingeschaltet — verschachtelte Objekte werden automatisch zu Spalten in Punktnotation aufgesprengt, in beliebiger Tiefe (customer.contact.email oder sogar a.b.c.d). Im Konverter dieser Seite ist Flachlegen die Standardeinstellung: Fügen Sie Ihr JSON ein oder laden Sie es hoch, konvertieren Sie, und jeder verschachtelte Pfad wird zu einer eigenen sortierbaren, filterbaren Spalte.

Was passiert mit Arrays, wenn man verschachteltes JSON in CSV umwandelt?

Das hängt davon ab, was das Array enthält. Listen einfacher Werte (Zeichenketten, Zahlen) werden mit \"; \" zu einer einzigen Zelle verbunden — aus [\"book\", \"pen\"] wird book; pen. Objektlisten werden als eine zitierte JSON-Text-Zelle gespeichert, weil Objekte keine flachen Werte werden können. Leere Listen werden zu leeren Zellen. Gemischte Listen werden als Ganzes in Text umgewandelt — halten Sie Listen also homogen für vorhersagbare Ergebnisse.

Warum hat mein flachgelegtes CSV so viele leere Zellen?

Leere Zellen sind normal und ehrlich: Ein Nullwert wird zu einer leeren Zelle, eine leere Liste wird zu einer leeren Zelle, und wenn Zeilen unterschiedliche Schlüssel haben (unregelmäßige Daten), hinterlassen die fehlenden Schlüssel Lücken. Prüfen Sie, ob die leeren Stellen zu Nullwerten in Ihrem Quell-JSON passen — wenn ja, ist die Konvertierung korrekt.

Soll ich das Flachlegen beim Umwandeln von JSON in CSV ein- oder ausschalten?

Lassen Sie es für Analysen eingeschaltet — Spalten in Punktnotation sind das, was Pivot-Tabellen, Filter und Diagramme brauchen. Schalten Sie es nur aus, wenn Sie die exakte verschachtelte Struktur bewahren müssen, zum Beispiel bevor Sie Zeilen zurück in ein System einspeisen, das JSON-förmige Felder erwartet. Im Aus-Modus wird jeder verschachtelte Wert als zitierter roher JSON-Text gespeichert — korrekt, aber für Tabellen unbrauchbar.

Kann ich eine CSV-Zeile pro Eintrag in einem verschachtelten Array von Objekten erhalten?

Dieser Konverter erweitert Objektlisten nicht zu Zeilen — er speichert sie als eine JSON-Text-Zelle. Die zuverlässige Lösung: Extrahieren Sie das innere Array und konvertieren Sie es für sich allein (konvertieren Sie zum Beispiel nur [{\"code\":\"TX-1\"},{\"code\":\"TX-2\"}]), um eine saubere Ausgabe mit einer Zeile pro Eintrag zu erhalten. Führen Sie die Extraktion vor dem Konvertieren durch, nicht danach.

Gibt es ein kostenloses Tool, das verschachteltes JSON online in CSV umwandelt?

Ja — der Konverter dieser Seite ist kostenlos, braucht keine Anmeldung und legt verschachteltes JSON standardmäßig flach (Spalten in Punktnotation, mit \"; \" verbundene Listen), vollständig in Ihrem Browser, sodass Ihre Daten Ihr Gerät nie verlassen. Laden Sie eine Datei hoch oder fügen Sie JSON ein, lassen Sie das Flachlegen eingeschaltet, wählen Sie Ihr Trennzeichen und laden Sie das CSV herunter.

Verschachteltes JSON? Jetzt flachlegen — nichts zu installieren

Fügen Sie Ihr verschachteltes JSON ein oder laden Sie die Datei hoch: Objekte werden zu Spalten in Punktnotation, Listen werden sauber verbunden, und die Konvertierung läuft vollständig in Ihrem Browser. Kostenlos, keine Anmeldung.

JSON-zu-CSV-Konverter öffnen
Alle Anleitungen