json-csv.de

JSON zu CSV · jq

JSON zu CSV mit jq in der Shell

Auf der Kommandozeile ist jq das schnellste Werkzeug, um JSON in CSV umzuwandeln. Der eingebaute Filter @csv kümmert sich um Quoting und Escaping, sodass ein einziger Befehl genügt. Das eignet sich ideal für Pipelines, Cronjobs und das Verarbeiten von API-Antworten direkt im Terminal.

Ansatz

Der jq-Filter @csv erzeugt RFC-4180-konforme Zeilen, die Kopfzeile kommt aus den Schlüsseln des ersten Objekts.

Code-Beispiel

# daten.json: Liste von Objekten mit name, ort, alter
jq -r '
  (.[0] | keys_unsorted) as $spalten
  | $spalten, (.[] | [.[$spalten[]]])
  | @csv
' daten.json > daten.csv

# Beispiel-Ausgabe:
# "name","ort","alter"
# "Müller, A.","Köln",42

# Variante mit fester Spaltenauswahl:
jq -r '.[] | [.name, .ort, .alter] | @csv' daten.json

Hinweise

Der Filter @csv ist der Kern: Er nimmt ein Array und gibt eine korrekt gequotete CSV-Zeile zurück, in der Strings in Anführungszeichen stehen und innenliegende Anführungszeichen verdoppelt werden. Die Option -r, also raw output, ist zwingend, sonst würde jq die gesamte Zeile noch einmal als JSON-String quoten. keys_unsorted bewahrt die ursprüngliche Schlüsselreihenfolge, während das schlichte keys alphabetisch sortieren würde. Das Beispiel nimmt die Spalten vom ersten Objekt. Haben spätere Objekte weitere Schlüssel, fehlen diese Spalten. jq kennt kein Semikolon-Format für @csv. Für Excel mit Semikolon bauen Sie die Zeile selbst, etwa mit join(";") nach dem Quoten der Felder, oder importieren die Datei in Excel mit dem Komma als Trennzeichen. Verschachtelte Objekte müssen Sie vorher mit tostring oder gezieltem Zugriff auf Unterfelder auflösen, weil @csv nur Zahlen, Texte, Booleans und null akzeptiert und bei Arrays oder Objekten mit einem Fehler abbricht. Bei null schreibt @csv ein leeres Feld.

Anzeige

FAQ

Häufige Fragen

Warum brauche ich die Option -r?

Ohne -r umschließt jq die Ausgabe von @csv noch einmal mit Anführungszeichen und maskiert sie als JSON-String. Erst raw output schreibt die fertige CSV-Zeile direkt in die Datei.

Wie gehe ich mit verschachtelten Feldern um?

@csv akzeptiert nur einfache Werte. Greifen Sie im Filter gezielt auf Unterfelder zu, etwa .adresse.ort, oder wandeln Sie das Teilobjekt mit tostring in einen String um, bevor Sie es ins Array packen.

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