JSON ist die Sprache der APIs; CSV ist die Sprache von Tabellenkalkulationen, Datenbanken und Analysten. Zwischen beiden zu konvertieren ist eine Alltagsaufgabe —— eine API-Antwort nach Excel exportieren oder eine Tabelle in JSON umwandeln, um sie zu importieren. Dieser Guide zeigt, wie man JSON in CSV und CSV in JSON konvertiert, in JavaScript, in Python und sofort im Browser —— sowie die Randfälle (verschachtelte Daten, Anführungszeichen, Typen), über die man am häufigsten stolpert.
Das zentrale Mapping: Array von Objekten ⇄ Zeilen
Eine CSV-Datei ist eine Tabelle: eine Kopfzeile mit Spaltennamen, dann eine Zeile pro Datensatz. Die JSON-Form, die sich natürlich auf diese Tabelle abbildet, ist ein Array von Objekten, wobei jedes Objekt eine Zeile und jeder Schlüssel eine Spalte ist.
// JSON
[
{ "id": 1, "name": "Ada Lovelace", "active": true },
{ "id": 2, "name": "Bob Khan", "active": false }
]# CSV
id,name,active
1,Ada Lovelace,true
2,Bob Khan,falseDie Kopfzeile ist die Vereinigung der Schlüssel aller Objekte (so bleiben Objekte mit unterschiedlichen Feldern ausgerichtet), und jede Zeile übernimmt den entsprechenden Wert für jede Spalte.
JSON in CSV in JavaScript konvertieren
Es gibt keine eingebaute JSON.toCSV, aber die Konvertierung ist kurz. Die einzige echte Arbeit ist das Escapen: jeder Wert mit Komma, doppeltem Anführungszeichen oder Zeilenumbruch muss in doppelte Anführungszeichen gesetzt werden, und innere Anführungszeichen werden verdoppelt.
function jsonToCsv(rows) {
if (!rows.length) return '';
const headers = [...new Set(rows.flatMap(Object.keys))];
const escape = (v) => {
if (v == null) return '';
const s = typeof v === 'object' ? JSON.stringify(v) : String(v);
return /[",\n\r]/.test(s) ? '"' + s.replace(/"/g, '""') + '"' : s;
};
const lines = [headers.join(',')];
for (const row of rows) {
lines.push(headers.map((h) => escape(row[h])).join(','));
}
return lines.join('\n');
} Beachten Sie den typeof v === 'object'-Zweig: ein verschachteltes Objekt oder Array hat keine flache CSV-Darstellung, daher ist die übliche Konvention, es als JSON-Text in der Zelle zu serialisieren. Mehr dazu unten.
CSV in JSON in JavaScript konvertieren
Das umgekehrte Problem ist, CSV korrekt zu parsen —— Felder können Kommas und Zeilenumbrüche innerhalb von Anführungszeichen enthalten, also reicht split(',') nicht. Verwenden Sie einen kleinen Zustandsautomaten (oder in Produktion eine Bibliothek wie papaparse):
function csvToJson(text) {
const rows = [];
let row = [], field = '', inQuotes = false;
for (let i = 0; i < text.length; i++) {
const c = text[i];
if (inQuotes) {
if (c === '"' && text[i + 1] === '"') { field += '"'; i++; }
else if (c === '"') inQuotes = false;
else field += c;
} else if (c === '"') inQuotes = true;
else if (c === ',') { row.push(field); field = ''; }
else if (c === '\n') { row.push(field); rows.push(row); row = []; field = ''; }
else if (c !== '\r') field += c;
}
if (field || row.length) { row.push(field); rows.push(row); }
const [headers, ...data] = rows;
return data.map((cells) =>
Object.fromEntries(headers.map((h, i) => [h, cells[i] ?? ''])));
}JSON und CSV in Python konvertieren
Pythons Standardbibliothek bringt das bereits mit —— keine Abhängigkeiten.
import csv, json, io
# JSON -> CSV
rows = json.loads(json_text)
buf = io.StringIO()
writer = csv.DictWriter(buf, fieldnames=list(rows[0].keys()))
writer.writeheader()
writer.writerows(rows)
csv_text = buf.getvalue()
# CSV -> JSON
rows = list(csv.DictReader(io.StringIO(csv_text)))
json_text = json.dumps(rows, indent=2)Die Randfälle, die wirklich zählen
Verschachtelte Objekte und Arrays
CSV ist flach; JSON nicht. Wenn der Wert ein Objekt oder Array ist, haben Sie zwei Optionen: ihn als JSON in einer Zelle serialisieren (einfach, reversibel) oder ihn auf mehrere Spalten abflachen wie address.city, address.zip (lesbar, aber verlustbehaftet und schwer rückgängig zu machen). Für den Round-Trip ist JSON in der Zelle die sicherere Wahl.
CSV verliert Typen
CSV hat keine Typen —— jedes Feld ist Text. Beim Wechsel von CSV zu JSON ist "1" ein String, es sei denn, Sie konvertieren ihn bewusst in eine Zahl. Vorsicht bei Werten wie 007 (eine Postleitzahl/ID, die ein String bleiben muss) oder sehr großen Ganzzahlen, die beim Cast zu Number an Genauigkeit verlieren. Konvertieren Sie nur, wenn der Round-Trip verlustfrei ist.
Anführungszeichen und Trennzeichen
Setzen Sie Felder mit Kommas, Anführungszeichen oder Zeilenumbrüchen immer in Anführungszeichen. Einige Locales (häufig in europäischem Excel) verwenden ; als Trennzeichen —— wenn Ihr CSV in irgendeiner Spalte falsch aussieht, prüfen Sie zuerst das Trennzeichen.
Inkonsistente Schlüssel
Wenn Ihre JSON-Objekte nicht alle die gleichen Schlüssel haben, bauen Sie die Kopfzeile aus der Vereinigung der Schlüssel und lassen fehlende Zellen leer —— gehen Sie nicht davon aus, dass das erste Objekt alle Spalten definiert.
Excel und das UTF-8-BOM
Wenn Ihre CSV in Excel geöffnet wird und Nicht-ASCII-Zeichen enthält, stellen Sie ein UTF-8-BOM voran (die Bytes 0xEF 0xBB 0xBF). Excel liest UTF-8 ohne BOM als Legacy-Encoding und zerstört Umlaute/asiatische Zeichen. Die meisten CSV-Bibliotheken können das BOM über eine Option ausgeben.
// JavaScript —— BOM schreiben, damit Excel UTF-8 korrekt liest
const out = '\uFEFF' + jsonToCsv(rows);Alternative Trennzeichen (CSV vs TSV vs ;)
„CSV“ ist nicht immer kommagetrennt. Gängige Varianten:
- TSV —— tabulatorgetrennt; sicherer, wenn Werte häufig Kommas enthalten.
- Europäisches Excel gibt
;als Trennzeichen in Regionen aus, wo das Komma das Dezimaltrennzeichen ist.
Wenn die Ausgabe beim Öffnen in einer einzigen seltsamen Spalte zusammengequetscht aussieht, verwendet die Datei ein anderes Trennzeichen als der Reader erwartet. Standardisieren Sie eines (CSV mit , + BOM für regionsübergreifendes Excel oder TSV für Engineering-Pipelines).
Für echte CSV PapaParse verwenden
Um im Browser/Node CSV von Nutzern zu parsen, verwenden Sie PapaParse —— es kümmert sich um Trennzeichenerkennung, quotierte Felder, mehrzeilige Werte, Kopfzeilen und dynamicTyping zum Konvertieren von Zahlen und Booleans. Die handgeschriebenen Snippets oben funktionieren für vertrauenswürdige, einfache Eingaben; im Maßstab nimmt man PapaParse.
JSON in CSV online konvertieren —— ohne Installation
Für eine einmalige Konvertierung können Sie den Code ganz überspringen. Fügen Sie Ihr JSON in den JSON-zu-CSV-Konverter von fixjson ein und klicken Sie auf To CSV, oder fügen Sie CSV ein und klicken Sie auf To JSON. Er kümmert sich automatisch um Escaping, Schlüsselvereinigung und Typumwandlung und läuft komplett im Browser —— nichts wird hochgeladen, was wichtig ist, wenn die Daten Kundendatensätze oder interne Exporte enthalten.
Häufig gestellte Fragen
Wie konvertiere ich JSON in CSV?
Nehmen Sie ein JSON-Array von Objekten, bauen Sie eine Kopfzeile aus der Vereinigung aller Schlüssel und schreiben Sie eine Zeile pro Objekt —— wobei Sie alle Werte mit Komma, Anführungszeichen oder Zeilenumbruch quotieren. Verwenden Sie csv.DictWriter in Python, eine kleine Funktion in JavaScript oder fügen Sie es in den Online-Konverter ein.
Wie konvertiere ich CSV in JSON?
Parsen Sie das CSV (unter Beachtung quotierter Felder), behandeln Sie die erste Zeile als Kopfzeile und bilden Sie jede nachfolgende Zeile auf ein Objekt mit diesen Kopfzeilen als Schlüssel ab. Denken Sie daran, dass alle Werte als Strings ankommen, wenn Sie sie nicht konvertieren.
Wie werden verschachtelte JSON-Objekte in CSV dargestellt?
CSV verschachtelt nicht, daher wird ein verschachteltes Objekt oder Array üblicherweise als JSON-Text in einer einzelnen Zelle geschrieben oder mit Punkten in Spalten wie address.city abgeflacht. JSON in der Zelle ist die reversible Option.
Kann ich JSON kostenlos online in CSV konvertieren?
Ja —— der Konverter von fixjson erledigt beide Richtungen kostenlos, vollständig im Browser, ohne Konto oder Upload.
Verwandte Werkzeuge und Guides
- JSON-zu-CSV-Konverter —— konvertiert in beide Richtungen im Browser
- CSV und XML in JSON konvertieren —— die umgekehrte Richtung, plus XML
- Was ist JSON? —— die Datentypen hinter der Konvertierung
- JSON-Validator —— prüfen Sie, dass Ihr JSON parst, bevor Sie konvertieren