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 zu verwandeln. 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, der Header wird separat ausgegeben.

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. Für deutsche Excel-Importe gibt es kein eingebautes Semikolon-Format, hier weichst du auf @tsv aus oder ersetzt die Trenner nachgelagert. Verschachtelte Objekte musst du vorher mit tostring oder gezieltem Zugriff auf Unterfelder auflösen, weil @csv nur skalare Werte akzeptiert und bei Arrays oder Objekten abbricht. Bei null-Werten schreibt @csv eine leere Zelle. Diese Lösung glänzt in Shell-Pipelines, etwa direkt hinter einem curl-Aufruf gegen eine API.

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 skalare Werte. Greife im Filter gezielt auf Unterfelder zu, etwa .adresse.ort, oder wandle das Teilobjekt mit tostring in einen String um, bevor du es ins Array packst.

Du willst nicht selbst programmieren? Der JSON-zu-CSV-Converter wandelt deine Daten direkt im Browser um, ohne Upload und ohne Installation.

Anzeige
Anzeige
Anzeige
Anzeige