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
| Funktion | Beschreibung |
|---|---|
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
PHPDie 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 errorIn 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://statthttp:\/\/).JSON_UNESCAPED_UNICODE— behält Multibyte-Zeichen unverändert bei, anstatt\uXXXX-Escapes zu verwenden.JSON_THROW_ON_ERROR— wirft eineJsonExceptionbei 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
- PHP JSON — die vollständige Tutorial-Einführung.
- PHP Arrays und Assoziative Arrays — die Strukturen, die sich am natürlichsten auf JSON abbilden lassen.
- PHP Functions — wie Sie encode/decode in eigene Hilfsfunktionen kapseln.