CSV in JSON umwandeln – und wieder zurück
Füge eine CSV-Tabelle ein und erhalte sofort JSON: Das Trennzeichen wird erkannt, die Kopfzeile ebenfalls, Zahlen und Wahrheitswerte werden auf Wunsch typisiert. Der Rückweg flacht verschachtelte Objekte in Punkt-Notation ab. Eine Tabellen-Vorschau und eine Fehlerliste je Zeile zeigen sofort, wo eine Datei hakt. Alles läuft in deinem Browser, ohne Upload und ohne Anmeldung.
Was ist eigentlich eine gültige CSV-Datei?
Der Referenztext ist RFC 4180 aus dem Oktober 2005, betitelt „Common Format and MIME Type for Comma-Separated Values (CSV) Files". Er beschreibt einen erstaunlich kleinen Kern: Felder werden durch Kommas getrennt, Zeilen durch CRLF beendet, Felder mit Komma, Anführungszeichen oder Zeilenumbruch stehen in doppelten Anführungszeichen, und ein Anführungszeichen im Feld wird verdoppelt.
Der Standard hält selbst fest, dass es keine formale Spezifikation gibt, an die sich alle halten – und genau das merkt man in der Praxis: Deutsche Excel-Versionen schreiben Semikolons, weil das Komma als Dezimaltrenner belegt ist. Exportwerkzeuge nutzen Tabulatoren. Manche Systeme setzen jedes Feld in Anführungszeichen, andere keines. Deshalb rät dieses Werkzeug das Trennzeichen, statt eines vorzuschreiben, und lässt dich die Entscheidung überschreiben.
Wie wird das Trennzeichen erkannt?
Gezählt wird in den ersten 20 nicht-leeren Zeilen, wie oft Komma, Semikolon, Tabulator und senkrechter Strich außerhalb von Anführungszeichen vorkommen. Gewonnen hat das Zeichen, dessen Anzahl in möglichst vielen Zeilen identisch ist. Konsistenz schlägt also Häufigkeit: Eine Semikolon-Datei mit Kommas in Adressfeldern wird korrekt erkannt, weil die Kommazahl von Zeile zu Zeile schwankt, die Semikolonzahl aber nicht.
Warum bleiben Postleitzahlen Text?
Weil aus 01067 sonst 1067 würde. Die Typ-Erkennung wandelt bewusst nur um, was exakt dem JSON-Zahlenformat entspricht:
42,-3.5,1e3werden Zahlen01067,+5,1.234,00,0049 30 123456bleiben Texttrueundfalse(Groß-/Kleinschreibung egal) werden Booleans- leere Felder und
nullwerden null
Das ist die konservative Auslegung: Lieber ein Wert zu wenig konvertiert als eine Artikelnummer, IBAN oder Telefonnummer zerstört. Wer alles als Text will, schaltet die Typ-Erkennung einfach aus.
Wie werden verschachtelte Objekte zu Spalten?
CSV kennt nur flache Tabellen, JSON nicht. Beim Weg von JSON nach CSV gilt daher die Punkt-Notation:
| JSON | CSV-Spalte |
|---|---|
{"adresse": {"stadt": "Berlin"}} | adresse.stadt |
{"tags": ["neu", "premium"]} | tags.0, tags.1 (oder eine Spalte mit ; getrennt) |
{"notiz": null} | leere Zelle |
Die Spaltenreihenfolge folgt dem ersten Auftreten, fehlende Schlüssel werden zu leeren Zellen. Ein Punkt im Schlüsselnamen selbst erzeugt einen mehrdeutigen Spaltennamen – das ist der bekannte Preis dieser Notation und lässt sich nicht sauber auflösen.
Ehrliche Grenzen
Alles läuft in einem einzigen Browser-Tab. Ab wenigen Megabyte wird das Tippen träge, ab rund 20 Millionen Zeichen lehnt das Werkzeug die Verarbeitung ab, damit der Tab nicht einfriert. Die Trennzeichen-Schätzung arbeitet zeilenweise und kann bei sehr vielen Zeilenumbrüchen innerhalb von Feldern danebenliegen – dann stellst du das Trennzeichen von Hand ein. Für Exporte im Gigabyte-Bereich sind csvkit, jq oder ein Skript die richtigen Werkzeuge, nicht ein Browser-Tab.