Signatur
Beschreibung
json_last_error() liefert einen Integer-Fehlercode, der den zuletzt aufgetretenen Fehler bei einem Aufruf von json_encode() oder json_decode() beschreibt. Trat kein Fehler auf, wird JSON_ERROR_NONE (0) zurückgegeben.
Die Funktion ist besonders nützlich, wenn json_decode() null zurückgibt und unklar ist, ob dies an einem Fehler oder an einem gültig kodierten null-Wert liegt. Durch Abfrage von json_last_error() lässt sich der Unterschied eindeutig feststellen.
Mögliche Fehlercodes sind als PHP-Konstanten verfügbar, z. B. JSON_ERROR_SYNTAX, JSON_ERROR_UTF8, JSON_ERROR_DEPTH, JSON_ERROR_STATE_MISMATCH, JSON_ERROR_CTRL_CHAR und weitere. Eine menschenlesbare Fehlerbeschreibung kann ergänzend mit json_last_error_msg() abgerufen werden.
Ab PHP 7.3.0 können json_encode() und json_decode() alternativ mit der Option JSON_THROW_ON_ERROR aufgerufen werden, die bei einem Fehler eine JsonException wirft, sodass json_last_error() nicht mehr manuell geprüft werden muss.
Rückgabewert
JSON_ERROR_NONE (0) wenn kein Fehler auftrat, oder einen der definierten JSON_ERROR_*-Konstanten bei einem Fehler.Beispiele
Fehlerbehandlung nach json_decode()
<?php
$json = '{"name": "Alice", "age": }'; // ungültiges JSON
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON-Fehler: ' . json_last_error_msg() . PHP_EOL;
echo 'Fehlercode: ' . json_last_error() . PHP_EOL;
} else {
print_r($data);
}
Unterschied zwischen null-Wert und Fehler
<?php
// Gültiges JSON mit null-Wert
$result = json_decode('null', true);
if (json_last_error() === JSON_ERROR_NONE) {
var_dump($result); // NULL — aber kein Fehler!
}
// Ungültiges JSON
$result2 = json_decode('ungültig', true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'Fehler beim Dekodieren: ' . json_last_error_msg() . PHP_EOL;
}
Moderne Alternative mit JSON_THROW_ON_ERROR (PHP 7.3+)
<?php
try {
$data = json_decode('{ungültig}', true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo 'JsonException gefangen: ' . $e->getMessage() . PHP_EOL;
// json_last_error() ist hier NICHT nötig
}
// Wichtig · Fallstricke
Achtung: json_last_error() gibt immer den Fehler des letzten JSON-Aufrufs zurück. In verschachtelten oder parallelen Verarbeitungsszenarien kann es leicht passieren, dass der relevante Fehlercode durch einen nachfolgenden erfolgreichen Aufruf überschrieben wird. Es empfiehlt sich daher, den Fehler unmittelbar nach dem jeweiligen json_encode()- oder json_decode()-Aufruf abzufragen.
Ab PHP 7.3.0 ist die Verwendung von JSON_THROW_ON_ERROR in Kombination mit einer JsonException-Abfanglogik die bevorzugte Methode zur Fehlerbehandlung, da sie robuster und weniger fehleranfällig als die manuelle Prüfung via json_last_error() ist.