Start · Sprachen · PHP · Referenz · json_last_error

json_last_error

Funktion

Gibt den Fehlercode des zuletzt aufgetretenen Fehlers beim JSON-Kodieren oder -Dekodieren zurück.

seit PHP 5.3.0 Kategorie: json

Signatur

json_last_error(): int

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

Typ
int
Beschreibung
Gibt einen der folgenden Fehlercodes zurück: 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);
}
JSON-Fehler: Syntax error Fehlercode: 4

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;
}
NULL Fehler beim Dekodieren: Syntax error

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
}
JsonException gefangen: Syntax error

// 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.