json.csv.de

JSON zu CSV · C#

JSON zu CSV in C#

In C# parst System.Text.Json das JSON ohne zusätzliche Pakete, für das CSV-Schreiben ist CsvHelper die etablierte Wahl. CsvHelper übernimmt Quoting, Trennzeichen und die richtige Kultur. Das folgende Beispiel verarbeitet eine Liste dynamischer Objekte und schreibt sie korrekt als CSV.

Ansatz

System.Text.Json liest das JSON in Dictionaries, CsvHelper schreibt die Tabelle mit automatischem Quoting.

Code-Beispiel

using System.Text.Json;
using System.Globalization;
using System.Text;
using CsvHelper;

string json = File.ReadAllText("daten.json");
var daten = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json);

var spalten = daten
    .SelectMany(o => o.Keys)
    .Distinct()
    .ToList();

using var writer = new StreamWriter("daten.csv", false, new UTF8Encoding(true));
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);

foreach (var spalte in spalten)
    csv.WriteField(spalte);
csv.NextRecord();

foreach (var zeile in daten)
{
    foreach (var spalte in spalten)
        csv.WriteField(zeile.TryGetValue(spalte, out var v) ? v?.ToString() : "");
    csv.NextRecord();
}

Console.WriteLine("daten.csv geschrieben");

Hinweise

CsvHelper setzt Anführungszeichen automatisch, sobald ein Feld das Trennzeichen, ein Anführungszeichen oder einen Zeilenumbruch enthält, und verdoppelt innenliegende Anführungszeichen. Die Wahl von CultureInfo.InvariantCulture ist hier bewusst, weil unter deutscher Kultur das Komma als Dezimaltrenner gilt und CsvHelper sonst ein Semikolon als Spaltentrenner verwenden würde. Wenn du gezielt das deutsche Excel-Format mit Semikolon willst, konfigurierst du das über CsvConfiguration mit Delimiter = ";". Das UTF8Encoding mit dem Argument true schreibt ein BOM, das Excel die UTF-8-Kodierung signalisiert. System.Text.Json liefert verschachtelte Werte als JsonElement, deren ToString die rohe JSON-Notation zurückgibt, was für eingebettete Objekte oft genau richtig ist. Für stark typisierte Modelle kannst du statt Dictionary eine eigene Klasse deserialisieren und CsvHelper die Spalten per Reflection erzeugen lassen.

Anzeige

FAQ

Häufige Fragen

Warum nutzt das Beispiel InvariantCulture?

Unter deutscher Kultur wählt CsvHelper das Semikolon als Trenner, weil das Komma als Dezimalzeichen belegt ist. InvariantCulture erzwingt das Komma. Willst du das deutsche Excel-Format, setze den Delimiter explizit auf Semikolon.

Brauche ich CsvHelper oder geht es ohne?

Es geht auch mit StringBuilder und eigenem Escaping. CsvHelper nimmt dir aber Quoting, Kultur und Edge Cases ab und ist über NuGet schnell eingebunden, daher lohnt es sich fast immer.

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