JSON zu CSV · Java
JSON zu CSV in Java
In Java übernimmt die Jackson-Bibliothek das Parsen des JSON, das Schreiben des CSV lässt sich mit wenig Code selbst erledigen oder über das Modul jackson-dataformat-csv automatisieren. Das folgende Beispiel kommt mit dem Standard-Jackson aus und kümmert sich selbst um das Quoting der Felder.
Ansatz
Jackson ObjectMapper liest das JSON, eine kleine Hilfsmethode schreibt RFC-4180-konformes CSV.
Code-Beispiel
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class JsonZuCsv {
static String escape(String s) {
if (s == null) return "";
if (s.contains(",") || s.contains("\"") || s.contains("\n")) {
return '"' + s.replace("\"", "\"\"") + '"';
}
return s;
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("daten.json"));
LinkedHashSet<String> spalten = new LinkedHashSet<>();
for (JsonNode o : root) o.fieldNames().forEachRemaining(spalten::add);
try (Writer w = new OutputStreamWriter(
new FileOutputStream("daten.csv"), StandardCharsets.UTF_8)) {
w.write(String.join(",", spalten) + "\r\n");
for (JsonNode o : root) {
List<String> werte = new ArrayList<>();
for (String k : spalten) {
JsonNode v = o.get(k);
werte.add(escape(v == null ? "" : v.asText()));
}
w.write(String.join(",", werte) + "\r\n");
}
}
}
} Hinweise
Jackson liest das JSON als JsonNode-Baum, was robust gegen unterschiedliche Objektstrukturen ist, weil du die Felder dynamisch über fieldNames abfragst. Das LinkedHashSet sammelt alle Spalten in der Reihenfolge ihres ersten Auftretens, sodass die Header stabil bleiben, auch wenn nicht jedes Objekt jeden Schlüssel hat. Der OutputStreamWriter mit StandardCharsets.UTF_8 erzwingt UTF-8 unabhängig von der Plattform-Vorgabe, die unter Windows sonst oft Windows-1252 wäre. asText liefert für verschachtelte Knoten einen leeren String, deshalb solltest du Objekte oder Arrays vorher mit toString serialisieren, wenn du sie behalten willst. Wer das Schreiben nicht selbst machen will, fügt jackson-dataformat-csv hinzu und nutzt CsvMapper mit einem CsvSchema, das Header und Quoting automatisch erzeugt. Für try-with-resources wird der Writer am Ende sicher geschlossen.
FAQ
Häufige Fragen
Soll ich jackson-dataformat-csv nutzen oder selbst schreiben?
Für einfache, flache Daten genügt das manuelle Schreiben wie im Beispiel. Das CSV-Modul von Jackson lohnt sich, wenn du Schemas, feste Spaltenreihenfolgen oder Quoting-Optionen brauchst, ohne sie selbst zu pflegen.
Warum sind meine Umlaute in der Datei kaputt?
Java verwendet ohne Angabe das Plattform-Encoding. Schreibe immer über einen OutputStreamWriter mit StandardCharsets.UTF_8, dann bleiben ä, ö, ü und ß erhalten.
Du willst nicht selbst programmieren? Der JSON-zu-CSV-Converter wandelt deine Daten direkt im Browser um, ohne Upload und ohne Installation.