W3docs

PHP JSON Funktionen Referenz

Referenz zu PHPs eingebauten JSON-Funktionen — json_encode, json_decode, json_last_error und JSON-Optionskonstanten — mit Beispielen.

JSON (JavaScript Object Notation) ist ein leichtgewichtiges, textbasiertes Datenaustauschformat. Da es für Menschen leicht lesbar und für Maschinen einfach zu verarbeiten ist, hat es sich zum Standardweg entwickelt, Daten zwischen einem Server und einem Browser sowie zwischen Webdiensten (REST APIs) zu übertragen.

PHP wird mit einer kleinen Sammlung eingebauter Funktionen geliefert — zusammengefasst als JSON-Erweiterung — die PHP-Werte in JSON-Text umwandeln und umgekehrt. Diese Seite ist eine Kurzreferenz zu diesen Funktionen und den nützlichsten Optionskonstanten. Ein schrittweises Tutorial finden Sie unter PHP JSON.

Wann würde ich JSON in PHP verwenden?

Diese Funktionen kommen zum Einsatz, wenn Daten PHP als Text verlassen oder als Text ankommen:

  • Rückgabe von Daten aus einem API-Endpunkt (echo json_encode($data);).
  • Lesen eines Anfrage-Bodys oder einer Konfigurationsdatei im JSON-Format.
  • Speichern eines strukturierten Werts (z. B. ein Array von Einstellungen) in einer einzelnen Datenbankspalte oder einem Cache-Schlüssel.
  • Kommunikation mit einem Drittanbieter-Webdienst, der JSON verwendet.

Die JSON-Erweiterung ist standardmäßig in PHP 5.2 und höher aktiviert und Teil des Kerns in PHP 8.0+, sodass keine Installation erforderlich ist.

JSON-Funktionen

FunktionBeschreibung
json_encode()Konvertiert einen PHP-Wert (Array, Objekt, Skalar) in einen JSON-String.
json_decode()Konvertiert einen JSON-String in einen PHP-Wert.
json_last_error()Gibt einen ganzzahligen Fehlercode des letzten json_encode()/json_decode()-Aufrufs zurück.
json_last_error_msg()Gibt eine lesbare Fehlermeldung für den letzten Fehler zurück.

json_encode()

json_encode() serialisiert einen PHP-Wert in einen JSON-formatierten String.

<?php

$data = [
    "name"  => "Ada",
    "age"   => 36,
    "langs" => ["PHP", "JS"],
];

echo json_encode($data);

?>

Ausgabe:

{"name":"Ada","age":36,"langs":["PHP","JS"]}

Beachten Sie, wie ein assoziatives Array zu einem JSON-Objekt {} wird, während ein listenartiges Array (["PHP","JS"]) zu einem JSON-Array [] wird. Die vollständige Referenz finden Sie unter json_encode().

Ausgabe formatiert darstellen

Übergeben Sie die Option JSON_PRETTY_PRINT, um das Ergebnis lesbar zu machen:

<?php

$data = ["name" => "Ada", "langs" => ["PHP", "JS"]];

echo json_encode($data, JSON_PRETTY_PRINT);

?>

Ausgabe:

{
    "name": "Ada",
    "langs": [
        "PHP",
        "JS"
    ]
}

json_decode()

json_decode() verarbeitet einen JSON-String und wandelt ihn in einen PHP-Wert um. Standardmäßig werden Objekte (stdClass) zurückgegeben; übergeben Sie true als zweites Argument, um stattdessen assoziative Arrays zu erhalten.

<?php

$json = '{"name":"Ada","age":36,"langs":["PHP","JS"]}';

// Decode as an associative array
$data = json_decode($json, true);

echo $data["name"];   // Ada
echo "\n";
echo $data["langs"][0]; // PHP

?>

Ausgabe:

Ada
PHP

Die vollständige Referenz finden Sie unter json_decode().

Fehlerbehandlung

json_encode() gibt false zurück und json_decode() gibt null zurück, wenn etwas schiefgeht (ungültiges UTF-8, ein Syntaxfehler in der Eingabe oder eine Verschachtelung tiefer als das Tiefenlimit). Da null auch ein gültiger dekodierter Wert ist, sollten Sie immer json_last_error() prüfen, anstatt nur auf null zu testen.

<?php

$bad = '{"name": "Ada", }';   // trailing comma is invalid JSON

$result = json_decode($bad, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    echo "Invalid JSON: " . json_last_error_msg();
} else {
    echo "Decoded fine.";
}

?>

Ausgabe:

Invalid JSON: Syntax error

In PHP 7.3+ können Sie das Flag JSON_THROW_ON_ERROR an beide Funktionen übergeben, um eine JsonException zu erhalten, anstatt den Fehlercode manuell zu überprüfen.

Häufig verwendete Optionskonstanten

Diese Bitmask-Konstanten werden im Argument $options von json_encode() übergeben (einige gelten auch für json_decode()):

  • JSON_PRETTY_PRINT — formatiert die Ausgabe mit Leerzeichen und Einrückungen.
  • JSON_UNESCAPED_SLASHES — lässt /-Zeichen unescaped (http:// statt http:\/\/).
  • JSON_UNESCAPED_UNICODE — behält Multibyte-Zeichen unverändert bei, anstatt \uXXXX-Escapes zu verwenden.
  • JSON_THROW_ON_ERROR — wirft eine JsonException bei einem Fehler (PHP 7.3+).
  • JSON_FORCE_OBJECT — gibt immer ein JSON-Objekt aus, auch bei einem sequenziellen Array.

Kombinieren Sie sie mit dem bitweisen OR-Operator:

<?php

$data = ["site" => "https://www.w3docs.com", "name" => "café"];

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

?>

Ausgabe:

{
    "site": "https://www.w3docs.com",
    "name": "café"
}

Verwandte Themen

Übung

Übung
Wofür werden die Funktionen json_encode und json_decode in PHP verwendet?
Wofür werden die Funktionen json_encode und json_decode in PHP verwendet?
Was this page helpful?