json.csv.de

JSON zu CSV · PHP

JSON zu CSV in PHP

PHP bietet mit fputcsv eine Funktion, die das Schreiben von CSV samt korrektem Escaping komplett übernimmt. Zusammen mit json_decode brauchst du nur wenige Zeilen, um eine JSON-Datei in eine Tabelle zu verwandeln. Das eignet sich gut für Exporte aus Webanwendungen oder CLI-Skripte.

Ansatz

json_decode mit assoziativen Arrays, fputcsv schreibt jede Zeile mit automatischem Quoting.

Code-Beispiel

<?php
$json = file_get_contents("daten.json");
$daten = json_decode($json, true); // true: assoziative Arrays

if (empty($daten)) {
    exit("Keine Daten gefunden");
}

// Spalten aus dem ersten Objekt übernehmen
$spalten = array_keys($daten[0]);

$out = fopen("daten.csv", "w");

// BOM für Excel, damit Umlaute stimmen
fwrite($out, "\xEF\xBB\xBF");

fputcsv($out, $spalten);
foreach ($daten as $zeile) {
    $werte = [];
    foreach ($spalten as $key) {
        $werte[] = $zeile[$key] ?? "";
    }
    fputcsv($out, $werte);
}

fclose($out);
echo "daten.csv geschrieben";

Hinweise

fputcsv setzt Anführungszeichen automatisch, wenn ein Wert das Trennzeichen, ein Anführungszeichen oder einen Zeilenumbruch enthält, und verdoppelt innenliegende Anführungszeichen. Das manuelle Escaping fällt damit weg. Das vorangestellte UTF-8-BOM \xEF\xBB\xBF sorgt dafür, dass Excel deutsche Umlaute korrekt anzeigt, ohne das BOM interpretiert es die Datei oft als Windows-1252. Ab PHP 8.1 kannst du bei fputcsv das Escape-Zeichen explizit auf einen leeren String setzen, um das nicht standardkonforme Backslash-Escaping abzuschalten, was Importe in andere Systeme verlässlicher macht. Verschachtelte Werte aus dem JSON, also Arrays oder Objekte, musst du vor dem Schreiben mit json_encode in einen String umwandeln, sonst löst fputcsv eine Warnung aus. Der Null-Koaleszenz-Operator im Beispiel fängt fehlende Schlüssel ab.

Anzeige

FAQ

Häufige Fragen

Warum erscheinen Umlaute in Excel als kryptische Zeichen?

Excel erwartet bei UTF-8 ein BOM. Schreibe vor der ersten Zeile \xEF\xBB\xBF in die Datei, dann werden ä, ö, ü und ß korrekt dargestellt.

Wie schicke ich das CSV direkt als Download an den Browser?

Setze die Header Content-Type: text/csv und Content-Disposition: attachment, öffne dann mit fopen die Ausgabe php://output statt einer Datei und schreibe mit fputcsv dorthin.

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