W3docs

PHP JSON

Lernen Sie JSON in PHP: Arrays mit json_encode kodieren, Strings mit json_decode dekodieren, Ausgabe formatieren und Fehler sicher behandeln.

JSON (JavaScript Object Notation) ist ein leichtgewichtiges, textbasiertes Datenaustauschformat. Es ist die gebräuchlichste Methode, um Daten zwischen einem PHP-Backend und einem Browser, einer mobilen App oder einem anderen Webservice auszutauschen (die meisten REST APIs verwenden JSON). Dieser Leitfaden behandelt alles, was Sie für die Arbeit mit JSON in PHP benötigen: PHP-Daten mit json_encode in JSON umwandeln, JSON mit json_decode zurück in PHP-Daten konvertieren, die Ausgabe formatieren und Fehler sicher behandeln.

PHP liefert JSON-Unterstützung in seinem Kern (die ext-json-Erweiterung ist gebündelt und seit PHP 8.0 standardmäßig aktiviert), daher muss nichts installiert werden.

Wie JSON aussieht

JSON stellt Daten als Schlüssel-Wert-Paare innerhalb von Objekten ({ }) und geordnete Listen innerhalb von Arrays ([ ]) dar. Werte können Strings, Zahlen, boolesche Werte, null, Arrays oder verschachtelte Objekte sein:

{
  "name": "John",
  "age": 30,
  "active": true,
  "roles": ["admin", "editor"]
}

Die zwei Funktionen, die Sie fast immer verwenden werden, sind:

  • json_encode($value) — PHP-Wert → JSON-String (serialisieren).
  • json_decode($json) — JSON-String → PHP-Wert (deserialisieren).

Kodieren: PHP zu JSON mit json_encode

json_encode() konvertiert einen PHP-Wert — typischerweise ein Array oder Objekt — in einen JSON-String.

Ein assoziatives Array kodieren

php— editable, runs on the server

Ein assoziatives Array wird zu einem JSON-Objekt, während ein indiziertes Array (aufeinanderfolgende ganzzahlige Schlüssel beginnend bei 0) zu einem JSON-Array wird:

<?php

echo json_encode(["red", "green", "blue"]);
// ["red","green","blue"]

?>

Die Ausgabe formatieren

Standardmäßig erzeugt json_encode kompaktes JSON in einer einzigen Zeile, was ideal für die Übertragung über das Netzwerk ist. Wenn Sie eine menschenlesbare Ausgabe wünschen (für Protokollierung oder Debugging), übergeben Sie das Flag JSON_PRETTY_PRINT. Flags werden mit dem bitweisen |-Operator kombiniert:

<?php

$data = [
    "user" => ["name" => "Jane", "roles" => ["admin", "editor"]],
    "active" => true,
];

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

?>

Dies gibt schön eingerücktes JSON aus:

{
    "user": {
        "name": "Jane",
        "roles": [
            "admin",
            "editor"
        ]
    },
    "active": true
}

Weitere nützliche Flags: JSON_UNESCAPED_SLASHES (behält / anstatt \/) und JSON_UNESCAPED_UNICODE (behält Zeichen wie é anstatt é).

Dekodieren: JSON zu PHP mit json_decode

json_decode() konvertiert einen JSON-String zurück in einen PHP-Wert. Standardmäßig werden Objekte zurückgegeben, aber wenn true als zweites Argument übergeben wird, werden stattdessen assoziative Arrays zurückgegeben — die sich in der Regel einfacher durchlaufen lassen:

php— editable, runs on the server

Ohne das Argument true erhalten Sie ein stdClass-Objekt und greifen auf Werte mit der Pfeilnotation -> anstatt [ ] zu:

php— editable, runs on the server

Verwenden Sie true, wenn Sie ein Array möchten; lassen Sie es weg, wenn Sie die Objektsyntax bevorzugen. Beide enthalten dieselben Daten.

Ein benutzerdefiniertes Objekt kodieren

json_encode funktioniert auch mit Objekten. Wenn Sie eine JSON-Struktur spontan aufbauen möchten, können Sie mit dem leeren stdClass-Objekt Eigenschaften dynamisch hinzufügen. (Für vollständige Klassen, siehe PHP Classes and Objects.)

php— editable, runs on the server

Öffentliche Eigenschaften eines jeden Objekts werden automatisch einbezogen; private und geschützte Eigenschaften werden übersprungen, es sei denn, die Klasse implementiert das Interface JsonSerializable.

Fehlerbehandlung

Das JSON-Parsen kann fehlschlagen — ein fehlerhafter String, ein nicht abgeschlossenes Anführungszeichen oder ein abschließendes Komma können das Dekodieren beeinträchtigen. Wenn json_decode fehlschlägt, gibt es null zurück, daher müssen Sie einen echten null-Wert von einem Fehler unterscheiden. Prüfen Sie json_last_error() (oder lesen Sie json_last_error_msg() für eine menschenlesbare Meldung):

<?php

$badJson = '{invalid}';
$result = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON error: " . json_last_error_msg();
    // JSON error: Syntax error
}

?>

Seit PHP 7.3 können Sie stattdessen das Flag JSON_THROW_ON_ERROR übergeben, damit beide Funktionen eine JsonException werfen, die sich sauber in try/catch-Blöcke einfügt:

<?php

try {
    $data = json_decode('{invalid}', true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    echo "Could not parse JSON: " . $e->getMessage();
}

?>

Hinweis: json_decode hat ein Tiefenlimit (standardmäßig 512 Ebenen, das dritte Argument). Sehr tief verschachteltes JSON schlägt mit einem JSON_ERROR_DEPTH-Fehler fehl, es sei denn, Sie erhöhen diesen Wert.

Häufiger Anwendungsfall: einen JSON-Anfragekörper lesen

Wenn ein Client JSON an einen PHP-Endpunkt sendet (wie es die meisten APIs tun), kommt der Körper als Roheingabe und nicht als $_POST an. Lesen Sie ihn mit php://input und dekodieren Sie ihn:

<?php

$body = file_get_contents("php://input");
$data = json_decode($body, true);

// echo a JSON response back to the client
header("Content-Type: application/json");
echo json_encode(["received" => $data]);

?>

Fazit

JSON ist das Standardformat für den Datenaustausch in modernen Webanwendungen, und PHP macht die Arbeit damit unkompliziert:

  • Verwenden Sie json_encode, um Arrays und Objekte in JSON umzuwandeln; fügen Sie JSON_PRETTY_PRINT für lesbare Ausgabe hinzu.
  • Verwenden Sie json_decode, um JSON zurück in PHP umzuwandeln — übergeben Sie true für ein Array, lassen Sie es für ein Objekt weg.
  • Prüfen Sie immer auf Fehler mit json_last_error() oder JSON_THROW_ON_ERROR, bevor Sie dekodierte Daten vertrauen.

Mit diesen Werkzeugen können Sie JSON zuverlässig zwischen Ihrem PHP-Code, Datenbanken, Browsern und externen Webservices senden und empfangen.

Übungen

Übung
Welche Funktionen bietet PHP für die Verarbeitung von JSON-Daten?
Welche Funktionen bietet PHP für die Verarbeitung von JSON-Daten?
Was this page helpful?