JSON nach Excel: vier Wege und wo jeder an Treue verliert
Fazit: Verschachtelte Strukturen, uneinheitliche Felder und Arrays von Arrays sind die Stellen, an denen die Konvertierung von JSON nach Excel bricht. Vier Wege, nach Zeit bis zum Ergebnis sortiert, jeder mit Abwägungen.

Kurz gesagt: Ein flaches Array aus Objekten oder ein Objekt, das ein Array umschließt, konvertiert am schnellsten über das Online-Werkzeug; Power Query bei wöchentlicher Aktualisierung, pandas bei vielen Feldern zum Bereinigen, und ein Node-Skript nur, wenn die Konvertierung Teil einer Pipeline sein muss – aber entscheiden Sie vor verschachtelten Daten oder uneinheitlichen Schlüsseln, was „eine Zeile“ bedeutet.
Die Konvertierung selbst ist nicht schwer; schwer ist zu entdecken, dass Zahlen zu Text wurden und mehrere Verschachtelungsebenen in einer kollabierten. Wer die Datenstruktur vor der Wahl der Methode liest, erspart sich eine Nacharbeit.
1. Zuerst feststellen, welche Art von JSON vorliegt
Öffnen Sie die Datei und sehen Sie die äußerste Ebene an:
| Struktur | Form | Schwierigkeit der Konvertierung |
|---|---|---|
| Flaches Array aus Objekten | [{"a":1,"b":2},{...}] |
Am einfachsten – eine Zeile pro Datensatz |
| Objekt, das ein Array umschließt | {"data":[{...}],"total":100} |
Einfach – die data-Ebene nehmen |
| Verschachtelte Objekte | {"user":{"name":"x"}} |
Mittel – entscheiden, ob abflachen oder in einen String zusammenführen |
| Arrays von Arrays | {"tags":["a","b"]} |
Mühsam – passt nicht in eine Zeile, braucht Tabellenaufteilung |
| Uneinheitliche Schlüssel | Jeder Datensatz hat andere Felder | Mühsam – Spalten bleiben meist leer |
Die ersten beiden konvertieren direkt mit nahezu 100 % Erfolgsquote; für die letzten drei entscheiden Sie zuerst, was „eine Zeile“ bedeutet, sonst ist das resultierende Blatt unbrauchbar.
2. Weg 1: Online-Werkzeug (1 Minute)
Öffnen Sie JSON to table, fügen Sie die Daten ein → Trennzeichen und Header wählen → CSV exportieren → in Excel öffnen. Geeignet für einige Dutzend bis einige Tausend Zeilen gut strukturierter Daten.
Drei Dinge müssen Sie beachten:
- Sie erhalten CSV, nicht xlsx. Beim Öffnen einer CSV errät Excel die Kodierung aus der System-Locale, chinesischer Text kann also zu Mojibake werden. „Daten → Aus Text/CSV“ zu verwenden und ausdrücklich UTF-8 zu wählen ist verlässlicher.
- Mit
0beginnende Kennungen verlieren ihre Nullen."007"ist in der CSV Text, Excel wandelt es aber automatisch in die Zahl 7. Setzen Sie diese Spalte beim Import auf Text oder fügen Sie in JSON ein Präfix hinzu. - Lange Zahlen werden zu wissenschaftlicher Notation. Personalausweisnummern und Bestellnummern mit mehr als 15 Ziffern verlieren Präzision; solche Felder sollten in JSON bereits Strings sein und müssen nach dem Import im Textformat bleiben.
3. Weg 2: Excel-eigenes Power Query (wiederverwendbar)
Wenn Ihre Daten jede Woche aktualisiert werden, verwenden Sie das in Excel eingebaute Power Query: einmal einrichten, dann nur „Aktualisieren“ klicken:
- „Daten“ → „Daten abrufen“ → „Aus Datei“ → „Aus JSON“;
- Nach Auswahl der Datei landen Sie im Power-Query-Editor, wo Sie
List- /Record-Strukturen sehen; - Klicken Sie auf das Erweitern-Symbol rechts neben einem Spaltenkopf, um verschachtelte Felder Ebene für Ebene zu expandieren;
- Wenn Spaltennamen und Typen stimmen, „Schließen & Laden“.
Der Vorteil ist, dass sich Verschachtelung Ebene für Ebene in mehrere Spalten expandieren lässt und Typen manuell zugewiesen werden können; der Preis ist, dass die erste Einrichtung den Unterschied zwischen List und Record verstehen muss – List ist ein Array, Record ein Objekt, und sie expandieren in verschiedene Richtungen.
4. Weg 3: Python + pandas (viele Felder, Reinigung nötig)
import pandas as pd
# Object wrapping an array: first reach the list level
rows = pd.read_json('data.json')['data']
# Expand nested fields into multiple columns
frame = pd.json_normalize(rows, sep='_')
frame.to_excel('out.xlsx', index=False)
Der Schlüsselparameter von json_normalize ist sep, er bestimmt den Spaltenbenennungsstil nach dem Expandieren verschachtelter Felder; user_name ist in Excel leichter zu verwenden als user.name. Arrays von Arrays (etwa tags) brauchen einen zusätzlichen explode-Schritt:
frame = frame.explode('tags')
Dieser Schritt teilt eine Zeile in mehrere auf, die einzige Möglichkeit, eine Eins-zu-viele-Beziehung zu bewahren – zum Preis duplizierter übriger Felder.
5. Weg 4: ein Node-Skript (wenn es Teil einer Pipeline sein muss)
import { readFileSync, writeFileSync } from 'node:fs';
const rows = JSON.parse(readFileSync('data.json', 'utf8'));
const headers = [...new Set(rows.flatMap((row) => Object.keys(row)))];
const escapeCell = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
const lines = [
headers.join(','),
...rows.map((row) => headers.map((key) => escapeCell(row[key])).join(',')),
];
writeFileSync('out.csv', '\uFEFF' + lines.join('\n'), 'utf8');
Zwei Details sollten Sie nicht überspringen: Schreiben Sie \uFEFF (ein BOM) an den Anfang, damit Excel UTF-8 erkennt, und escapen Sie doppelte Anführungszeichen in Zellen als "", sonst verschieben sich die Spalten.
6. Drei Dinge, die eine Konvertierung immer verliert
| Verlorenes Element | Symptom | Abhilfe |
|---|---|---|
| Typinformation | Zahlen und Booleans werden Text oder TRUE/FALSE |
Spaltentypen nach dem Import manuell setzen oder in Power Query angeben |
| Verschachtelungsebenen | Tiefe Felder kollabieren zu [object Object] |
json_normalize verwenden oder Ebene für Ebene expandieren – niemals String(obj) |
| Eins-zu-viele-Beziehungen | Arrays werden in eine einzelne Zelle gestopft | Zeilen mit explode aufteilen oder eine separate verknüpfte Tabelle bauen |
Außerdem sehen null und „Feld fehlt“ in einem Blatt gleich aus (beides leere Zellen), bedeuten in der Geschäftsdomäne aber Unterschiedliches. Müssen Sie sie unterscheiden, wandeln Sie null in JSON ausdrücklich in den String "null" um oder fügen eine Markierungsspalte _has_field hinzu.
7. Nachträgliche Prüfung: nicht nur die erste Zeile ansehen
Prüfen Sie nach der Konvertierung mindestens drei Dinge stichprobenartig:
- Datensatzzahl: Die Zahl der CSV-Zeilen sollte der Array-Länge + 1 (Header) entsprechen; eine fehlende Zeile bedeutet meist, dass der abschließende Zeilenumbruch verschluckt wurde;
- Die Spalte mit der höchsten Nullrate: Viele leere Zellen deuten auf uneinheitliche Schlüsselnamen hin – prüfen Sie im Original-JSON, ob zwei Schreibweisen (
userIdunduser_id) verwendet werden; - Die längste Zeile: Verschachtelte Arrays landen meist dort; bestätigen Sie, dass nichts abgeschnitten wurde.
Brauchen Sie die Gegenoperation (Excel/CSV zurück nach JSON), verwenden Sie CSV to JSON, und denken Sie daran, dass der Header als Schlüsselnamen behandelt wird – den Header zu ändern heißt, die Feldnamen zu ändern.
FAQ
Wie wähle ich zwischen Online-Werkzeug, Power Query und pandas?
Verwenden Sie das Online-Werkzeug für einige Dutzend bis einige Tausend Zeilen gut strukturierter Daten, die Sie einmal konvertieren. Verwenden Sie Power Query, wenn die Daten jede Woche aktualisiert werden, da es einmal eingerichtet und mit einem Klick aktualisiert wird. Verwenden Sie pandas mit json_normalize, wenn viele Felder zu bereinigen sind, und ein Node-Skript, wenn die Konvertierung Teil einer Pipeline sein muss.
Warum wird chinesischer Text in einer CSV zu Mojibake?
Der Export ist CSV, nicht xlsx, und Excel errät die Kodierung aus der System-Locale, UTF-8 ohne BOM zeigt also Mojibake. Schreiben Sie ein \uFEFF-BOM an den Dateianfang oder öffnen Sie die Datei über „Daten → Aus Text/CSV“ und wählen Sie UTF-8 ausdrücklich.
Sollten verschachtelte Objekte abgeflacht oder in zusätzliche Zeilen aufgeteilt werden?
Flachen Sie sie Ebene für Ebene ab, statt sie als Strings einzufügen: Power Query expandiert verschachtelte Felder in Spalten, und json_normalize mit sep tut in pandas dasselbe. Arrays von Arrays brauchen einen zusätzlichen explode-Schritt, der eine Zeile in mehrere teilt. Ein tiefes Objekt an String(obj) zu geben liefert nur [object Object].