JSON zu CSV · JavaScript
JSON zu CSV in JavaScript
Im Browser brauchen Sie keine Bibliothek, um JSON in CSV umzuwandeln. Ein paar Zeilen reines JavaScript reichen aus, um ein Array von Objekten in eine Tabelle zu überführen und sie direkt als Datei zum Download anzubieten. Wichtig ist nur das saubere Maskieren der Sonderzeichen.
Ansatz
Reines JavaScript ohne Bibliothek, manuelles Quoting nach RFC 4180 und Download über einen Blob.
Code-Beispiel
function jsonZuCsv(daten, trenner = ";") {
const spalten = [...new Set(daten.flatMap(o => Object.keys(o)))];
const escape = (wert) => {
const s = wert == null ? "" : String(wert);
// Quoten, sobald Trenner, Anführungszeichen oder Umbruch vorkommt
if (s.includes(trenner) || /["\r\n]/.test(s)) {
return '"' + s.replace(/"/g, '""') + '"';
}
return s;
};
const kopf = spalten.map(escape).join(trenner);
const zeilen = daten.map(o => spalten.map(k => escape(o[k])).join(trenner));
return [kopf, ...zeilen].join("\r\n");
}
const csv = jsonZuCsv([{ name: "Müller, A.", ort: "Köln" }]);
// "\uFEFF" ist das BOM, damit Excel die Umlaute richtig erkennt
const blob = new Blob(["\uFEFF" + csv], { type: "text/csv;charset=utf-8" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "daten.csv";
a.click();
URL.revokeObjectURL(url);
Hinweise
Der Kern ist die escape-Funktion: Ein Wert wird nur dann in Anführungszeichen gesetzt, wenn er das Trennzeichen, ein Anführungszeichen oder einen Zeilenumbruch enthält, und innenliegende Anführungszeichen werden verdoppelt. Das entspricht dem RFC-4180-Standard, den auch Excel und LibreOffice erwarten. Als Zeilentrenner nutzt das Beispiel CRLF, wie es der Standard vorsieht. null und undefined werden bewusst zu leeren Zellen, damit keine Texte wie "undefined" in der Tabelle landen. Verschachtelte Objekte würden über String() als [object Object] erscheinen, machen Sie sie also vorher flach oder serialisieren Sie sie mit JSON.stringify. Das BOM steht als "\uFEFF" vor dem CSV-String.
FAQ
Häufige Fragen
Warum nicht einfach join mit Trenner ohne Escaping?
Sobald ein Wert selbst den Trenner, ein Anführungszeichen oder einen Zeilenumbruch enthält, verschiebt das die Spalten. Die escape-Funktion verhindert genau diese kaputten Zeilen.
Wie erscheinen Umlaute in Excel richtig?
Stellen Sie dem CSV-String ein BOM voran: new Blob(["\uFEFF" + csv], ...). Dann erkennt Excel die UTF-8-Kodierung und zeigt ä, ö, ü korrekt an.
Sie wollen nicht selbst programmieren? Der JSON-CSV-Konverter wandelt Ihre Daten direkt im Browser um, ohne Upload und ohne Installation.