json-csv.de

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.

Anzeige

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.

Anzeige
Anzeige
Anzeige
Anzeige