Zum Inhalt springen

CSV-JSON-Konverter

Wandle CSV in ein JSON-Array aus Objekten um oder JSON in CSV. Erkennt das Trennzeichen, löst verschachteltes JSON auf, optionales BOM für Excel – ohne Upload.

0 Zeichen · 0 Zeilen

Ausgeschaltet entsteht ein Array aus Arrays.
Werte mit führender Null wie 007 bleiben Text.

0 Zeichen · 0 Zeilen

Dateien werden nur auf diesem Gerät verarbeitet und nie auf einen Server hochgeladen. So funktioniert es

Bidirektionale Umwandlung einer CSV-Tabelle mit Spalten a, b und Werten 1, 2 in das entsprechende JSON-Array

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""" bedeutet say "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"}} → Spalte address.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.

Quellen

Häufige Fragen

Was passiert mit den JSON-Schlüsseln, wenn ein Name in der Kopfzeile doppelt vorkommt oder eine Kopfzelle leer ist?

Keine Spalte geht verloren. Doppelte Namen erhalten _2, _3 usw.; leere Überschriften heißen column mit Spaltennummer. Bei id,name,name, über 1,Kim,Lee,x entstehen die Schlüssel id, name, name_2 und column4. Eine Warnung nennt die neuen Namen. Zusätzliche Spalten ohne Überschrift folgen derselben Regel. Für andere Schlüssel ändere die erste Zeile und konvertiere erneut.

Beim Laden einer Datei erscheint der Fehler „keine UTF-8-Datei“.

Schon ein einziges Byte, das kein gültiges UTF-8 ist, reicht aus, damit die ganze Datei abgelehnt wird. So gelangen keine verstümmelten Zeichen in die Umwandlung, und im Eingabefeld bleibt stehen, was vorher dort stand. Dateien, die Excel als „CSV (Trennzeichen-getrennt)“ speichert, sind auf koreanischem Windows oft in EUC-KR (CP949) und auf japanischem in Shift_JIS kodiert und lösen diesen Fehler aus; speichere sie in Excel über „Speichern unter“ → „CSV UTF-8 (durch Trennzeichen getrennt)“ neu und lade sie noch einmal. Geprüft werden nur Dateien: Du kannst den Inhalt also auch aus einem Programm, das ihn richtig anzeigt, kopieren und ins Eingabefeld einfügen.

Was passiert mit Leerzeilen mitten in meiner CSV?

Die standardmäßig aktive Option zum Überspringen leerer Zeilen entfernt nur völlig leere Zeilen. Ausgeschaltet wird eine Leerzeile zum Datensatz: Bei a,b als Überschrift enthält er zwei leere Strings und löst eine Spaltenzahlwarnung aus. Zeilen nur mit Trennzeichen (,) oder Leerraum bleiben auch bei aktiver Option erhalten. Leerzeilen in zitierten Feldern gehören zum Wert; ein einzelner abschließender Zeilenumbruch erzeugt keinen weiteren Datensatz.

Bei JSON → CSV erscheint „Dieses JSON lässt sich nicht in eine Tabelle umwandeln“. Was muss ich ändern?

Der Fehler erscheint, wenn der oberste Wert weder ein Objekt noch ein Array ist (etwa eine einzelne Zahl oder ein einzelner String) oder wenn das erste Element des Arrays weder ein Objekt noch ein Array ist. Darunter fällt eine reine Werteliste wie [1,2,3] oder ["a","b"]. Für eine Zeile pro Wert setzt du jedes Element in ein Array, [[1],[2],[3]], oder machst daraus Objekte, [{"v":1},{"v":2},{"v":3}], und bekommst so die Kopfzeile v. Ist das erste Element ein Objekt oder ein Array, ein späteres aber von anderer Art, erscheint stattdessen „Element [1] hat einen anderen Typ als das erste Element“. Gezählt wird ab 0, [1] ist also das zweite Element, und auch ein null zwischen Objekten wie in [{"a":1},null] löst diesen Fehler aus. Ein leeres Array [] ergibt ohne Fehler ein leeres Ergebnis.

Gibt es eine Größenbeschränkung? Was mache ich mit einer größeren Datei?

Für CSV → JSON wie für JSON → CSV liegt die Grenze bei 10 MB: Eine größere Datei wird abgelehnt, ohne gelesen zu werden, und bei eingefügtem Text über 10 MB erscheint nur der Fehler „Die Eingabe ist zu groß“ – teilweise umgewandelt wird nichts. Gezählt werden UTF-8-Bytes, nicht Zeichen: 1 Byte für einen englischen Buchstaben oder eine Ziffer, 2 für einen Buchstaben mit Akzent wie é oder ñ, 3 für ein koreanisches oder japanisches Zeichen. Teile eine große CSV in mehrere Dateien und wandle sie einzeln um; ist „Erste Zeile ist Kopfzeile“ eingeschaltet, setz die Kopfzeile an den Anfang jedes Teils. Ein großes JSON-Array teilst du in mehrere kleinere Arrays.

Verwendete Open-Source-Software: papaparse (MIT)

Zuletzt aktualisiert: