So funktioniert’s
Wähle oben die Richtung (CSV → JSON oder JSON → CSV) und füge deine Daten ins Eingabefeld ein oder zieh eine .csv-, .tsv-, .txt- oder .json-Datei hinein. Beim Hineinziehen einer Datei wechselt die Richtung automatisch passend zur Dateiendung. Das Ergebnis wird während der Eingabe angezeigt, und du kannst es mit dem Kopieren- oder Download-Button übernehmen. Unter dem Ergebnis siehst du die ersten 10 Zeilen (bis zu 30 Spalten) als Tabelle und erkennst so, ob die Spalten richtig getrennt wurden.
Bei CSV → JSON legst du fest, ob die erste Zeile eine Kopfzeile (die Schlüssel) ist. Eingeschaltet entsteht ein Array aus Objekten wie [{"name":"Kim","age":30}], ausgeschaltet ein Array aus Arrays wie [["name","age"],["Kim",30]]. Als Einrückung stehen 2 Leerzeichen, 4 Leerzeichen, Tabulator oder einzeilig zur Wahl.
Bei der ersten Umwandlung CSV → JSON wird die Bibliothek papaparse geladen. JSON → CSV braucht keine zusätzliche Konvertierungsbibliothek.
Die Regeln des CSV-Formats (RFC 4180)
CSV gibt es in vielen Varianten, die am häufigsten zitierte Referenz ist aber RFC 4180 aus dem Jahr 2005. Die wichtigsten Regeln:
- Jede Zeile ist ein Datensatz, die Felder werden durch Kommas getrennt. Die erste Zeile kann eine Kopfzeile sein, muss aber nicht.
- Enthält ein Feld ein Komma, ein doppeltes Anführungszeichen (“) oder einen Zeilenumbruch, wird das ganze Feld in doppelte Anführungszeichen gesetzt, zum Beispiel
"Seoul, Korea". - Ein Anführungszeichen innerhalb eines Feldes wird verdoppelt:
"say ""hi"""bedeutetsay "hi". - Leerzeichen gehören zum Feld. Leerzeichen am Anfang oder Ende werden nicht automatisch entfernt.
Bei JSON → CSV setzt dieses Tool Anführungszeichen nach diesen Regeln (auch um Felder mit Leerzeichen am Anfang oder Ende) und beendet Zeilen mit CRLF, wie es RFC 4180 vorsieht. Wird bei CSV → JSON ein Anführungszeichen nie geschlossen (die Daten enden mit "abc) oder folgt Text auf ein schließendes Anführungszeichen ("x"y), bekommst du statt eines Ergebnisses die ungefähre Zeilennummer. Zeilen mit einer anderen Feldanzahl als die Kopfzeile werden trotzdem umgewandelt, mit einer Warnung samt Zeilennummern.
Andere Trennzeichen als das Komma
Trotz des Namens verwenden viele „CSV“-Dateien kein Komma. Excel speichert CSV mit dem Listentrennzeichen aus den Windows-Regionseinstellungen, und in Regionen mit Dezimalkomma wie Deutschland, Frankreich oder Spanien ist das ein Semikolon (;), damit es nicht mit Zahlen wie 1,5 kollidiert. Aus einer Datenbank oder Tabellenkalkulation kopierte Tabellen sind oft tabulatorgetrennt (TSV), und in Logdateien kommt auch der senkrechte Strich (|) vor.
Steht das Trennzeichen auf „Automatisch erkennen“, zählt das Tool in den ersten 20 Datensätzen (innerhalb der ersten 64 KB der Eingabe), wie oft Komma, Semikolon, Tabulator und senkrechter Strich außerhalb von Anführungszeichen vorkommen, und nimmt das Zeichen, dessen Anzahl von Zeile zu Zeile am gleichmäßigsten ist. Das erkannte Trennzeichen steht unter dem Auswahlfeld; stimmt es nicht, wähle es einfach selbst aus.
So werden Zahlen und true/false umgewandelt
In einer CSV ist jedes Feld Text. Mit „Zahlen und true/false umwandeln“ ändern sich nur zwei Dinge, damit das JSON leichter zu verwenden ist: true und false (in beliebiger Groß- und Kleinschreibung) werden zu booleschen Werten, und Werte, die der JSON-Zahlensyntax entsprechen, werden zu Zahlen. Alles andere bleibt Text. Dazu gehören +1, .5, ein Wert mit Leerzeichen davor oder dahinter und eine Zelle, in der null oder yes steht. In einer Datei, deren Trennzeichen kein Komma ist, bleibt auch 1,5 Text. Ist das Komma das Trennzeichen, wird ein 1,5 ohne Anführungszeichen in zwei Zellen geteilt, 1 und 5, und jede wird zur Zahl. Aus -5 wird ebenfalls eine Zahl. Auch ein Wert, der sich als Exponentialschreibweise lesen lässt, etwa 1E5, wird zur Zahl (100000) – schalte die Option aus, wenn deine Daten solche Codes enthalten.
Manche Werte bleiben absichtlich unverändert. Werte mit führender Null (Postleitzahl 01234, Code 007) würden als Zahl ihre Null verlieren und bleiben deshalb Text. Eine Dezimalzahl, die mit einer einzelnen 0 beginnt, etwa 0.5, wird dagegen zur Zahl. Werte, die JavaScript-Zahlen nicht exakt darstellen können – also Ganzzahlen über 9007199254740991 (2^53 − 1) und Dezimalzahlen mit mehr als 15 signifikanten Stellen –, bleiben ebenfalls Text, damit sich ihr Wert nie unbemerkt ändert. Leere Felder werden zu einem leeren String (“”), nicht zu null.
So wird verschachteltes JSON zu flachen CSV-Spalten
Eine CSV ist eine flache Tabelle und kann verschachteltes JSON nicht direkt aufnehmen. Das Tool löst es nach diesen Regeln auf:
- Verschachtelte Objekte werden zu Schlüsseln in Punktnotation:
{"address":{"city":"Seoul"}}→ Spalteaddress.city - Arrays werden nicht aufgelöst, sondern als JSON-Text in eine Zelle geschrieben:
["a","b"] - null wird zu einer leeren Zelle, ein leeres Objekt zu
{}. - Die Spalten sind alle Schlüssel aller Objekte in der Reihenfolge ihres ersten Auftretens. Fehlt ein Schlüssel in einem Objekt, bleibt die Zelle leer.
Die übliche Eingabe ist ein Array aus Objekten. Ein einzelnes Objekt wird zu einer Tabelle mit einer Zeile, und bei einem Array aus Arrays wird jedes innere Array unverändert zu einer Zeile. Enthält ein ursprünglicher Schlüssel schon einen Punkt ("a.b"), kann er innerhalb desselben Objekts mit einem aufgelösten Schlüssel zusammenfallen. Dann bleibt nur der Wert erhalten, der in diesem Objekt weiter hinten steht: Bei {"a":{"b":1},"a.b":2} steht in der Zelle a.b die 2, in umgekehrter Reihenfolge der beiden Schlüssel die 1.
Jedes Element des obersten Arrays ergibt immer genau eine Zeile, egal was es enthält. Aus [{"id":1,"items":[{"sku":"A"},{"sku":"B"}]}] wird unter der Kopfzeile id,items eine einzige Zeile; brauchst du eine Zeile pro Element von items, gib nur das innere Array [{"sku":"A"},{"sku":"B"}] ein. Schickst du eine so erzeugte CSV wieder durch CSV → JSON, entsteht die ursprüngliche Struktur nicht neu: items kommt als String mit diesem Text zurück, nicht als Array, und eine Spalte wie address.city bleibt ein einzelner Schlüssel namens "address.city" statt eines verschachtelten Objekts.
Kaputte Umlaute, koreanische oder japanische Zeichen in Excel (BOM)
Öffnest du eine als UTF-8 gespeicherte CSV per Doppelklick in Excel, werden Umlaute sowie koreanische oder japanische Zeichen manchmal unlesbar. Excel liest die Datei als UTF-8, wenn sie mit einem BOM (Byte Order Mark, in UTF-8 die Bytes EF BB BF) beginnt; ohne BOM greift es auf die Standardkodierung des Computers zurück. Bei JSON → CSV setzt „UTF-8-BOM für Excel hinzufügen“ ein BOM an den Anfang der Datei vom Download-Button (data.csv oder, beim Trennzeichen „Tabulator“, data.tsv), und das Problem tritt nicht auf. Die Option ist von Anfang an eingeschaltet. Text, den du mit dem Kopieren-Button übernimmst, enthält nie ein BOM. Das BOM kommt nur in die heruntergeladene Datei; der Text im Ergebnisfeld enthält auch bei eingeschalteter Option keines. Hast du schon eine Datei, die ohne BOM gespeichert wurde, musst du sie nicht noch einmal umwandeln: Importiere sie in Excel über Daten → Aus Text/CSV, statt sie per Doppelklick zu öffnen.
Einige wenige Programme lesen das BOM als Teil der ersten Spaltenüberschrift. Geht die Datei also nicht an Excel, lässt du die Option besser aus. In der anderen Richtung entfernt CSV → JSON ein BOM am Anfang einer Datei oder Eingabe automatisch.
