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 brauchen Sie nur wenige Zeilen, um eine JSON-Datei in eine Tabelle umzuwandeln. 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
$daten = json_decode(file_get_contents("daten.json"), true); // true: assoziative Arrays

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

// Spalten aus allen Objekten sammeln
$spalten = [];
foreach ($daten as $zeile) {
    foreach (array_keys($zeile) as $key) {
        if (!in_array($key, $spalten, true)) {
            $spalten[] = $key;
        }
    }
}

// Arrays als JSON-Text, Booleans als true/false, null als leeres Feld
function zelle($wert) {
    if (is_array($wert)) return json_encode($wert, JSON_UNESCAPED_UNICODE);
    if (is_bool($wert)) return $wert ? "true" : "false";
    return $wert ?? "";
}

$out = fopen("daten.csv", "w");
fwrite($out, "\xEF\xBB\xBF"); // BOM für Excel, damit Umlaute stimmen

// Trenner Semikolon, Anführungszeichen ", Escape-Zeichen leer (reines RFC 4180)
fputcsv($out, $spalten, ";", '"', "");
foreach ($daten as $zeile) {
    $werte = [];
    foreach ($spalten as $key) {
        $werte[] = zelle($zeile[$key] ?? null);
    }
    fputcsv($out, $werte, ";", '"', "");
}

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

Hinweise

fputcsv setzt Anführungszeichen automatisch, wenn ein Wert das Trennzeichen, ein Anführungszeichen, einen Zeilenumbruch oder ein Leerzeichen 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. Der fünfte Parameter von fputcsv ist das Escape-Zeichen. Mit einem leeren String schalten Sie das nicht standardkonforme Backslash-Escaping ab, was Importe in andere Systeme verlässlicher macht. Seit PHP 8.4 gibt es eine Deprecation-Meldung, wenn der Parameter fehlt, deshalb steht er im Beispiel explizit. Die Hilfsfunktion zelle wandelt verschachtelte Werte vorher in Text um, sonst erzeugt fputcsv bei Arrays einen Hinweis und schreibt das Wort Array.

Anzeige

FAQ

Häufige Fragen

Warum erscheinen Umlaute in Excel als kryptische Zeichen?

Excel erwartet bei UTF-8 ein BOM. Schreiben Sie 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?

Setzen Sie die Header Content-Type: text/csv und Content-Disposition: attachment, öffnen Sie dann mit fopen die Ausgabe php://output statt einer Datei und schreiben Sie mit fputcsv dorthin.

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