Start · Sprachen · PHP · Referenz · json_last_error_msg

json_last_error_msg

Funktion

Gibt die Fehlermeldung des letzten Aufrufs von <code>json_validate()</code>, <code>json_encode()</code> oder <code>json_decode()</code> als lesbaren String zurück.

seit PHP 5.5.0 Kategorie: json

Signatur

json_last_error_msg(): string

Beschreibung

json_last_error_msg() ergänzt json_last_error() um eine menschenlesbare Fehlerbeschreibung. Während json_last_error() einen numerischen Fehlercode zurückgibt, liefert diese Funktion direkt einen englischsprachigen Text wie "Syntax error" oder "No error", was die Fehleranalyse und das Logging deutlich komfortabler macht.

Die Funktion gibt immer "No error" zurück, wenn der letzte JSON-Vorgang erfolgreich war. Bei einem aufgetretenen Fehler enthält der String eine kurze Beschreibung des Problems, z. B. "Malformed UTF-8 characters, possibly incorrectly encoded" oder "Maximum stack depth exceeded".

Typischerweise wird json_last_error_msg() direkt nach einem json_decode()- oder json_encode()-Aufruf eingesetzt, um im Fehlerfall eine aussagekräftige Meldung ins Log zu schreiben oder als Exception-Nachricht weiterzugeben. In modernem PHP (ab 7.3) bieten die Optionen JSON_THROW_ON_ERROR eine Alternative, die Exceptions wirft und auf das manuelle Prüfen des Fehlerstatus verzichtet.

Rückgabewert

Typ
string
Beschreibung
Gibt eine englischsprachige Fehlermeldung als String zurück. Wenn kein Fehler vorliegt, wird "No error" zurückgegeben.

Beispiele

Fehlermeldung nach ungültigem JSON-String ausgeben

<?php
$json = '{ungültiges json: true}';
$data = json_decode($json);

if (json_last_error() !== JSON_ERROR_NONE) {
    echo 'JSON-Fehler: ' . json_last_error_msg();
} else {
    var_dump($data);
}
JSON-Fehler: Syntax error

Fehlermeldung als Exception-Nachricht weitergeben (vor PHP 7.3)

<?php
function jsonDecodeStrict(string $json): mixed
{
    $data = json_decode($json, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new \RuntimeException(
            'JSON-Dekodierung fehlgeschlagen: ' . json_last_error_msg()
        );
    }
    return $data;
}

try {
    $result = jsonDecodeStrict('{"name": "Alice"}');
    echo $result['name'] . PHP_EOL;

    $result = jsonDecodeStrict('{kaputt}');
} catch (\RuntimeException $e) {
    echo 'Fehler: ' . $e->getMessage();
}
Alice Fehler: JSON-Dekodierung fehlgeschlagen: Syntax error

Vergleich mit JSON_THROW_ON_ERROR (PHP 7.3+)

<?php
// Moderner Ansatz: Exception statt manueller Fehlerprüfung
try {
    $data = json_decode('{kaputt}', true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
    echo 'JsonException: ' . $e->getMessage();
}
JsonException: Syntax error

// Wichtig · Fallstricke

Globaler Zustand: Wie json_last_error() basiert diese Funktion auf einem globalen Fehlerstatus, der bei jedem JSON-Aufruf überschrieben wird. In nebenläufigen oder verschachtelten Szenarien kann es zu Race Conditions kommen – hier empfiehlt sich JSON_THROW_ON_ERROR (ab PHP 7.3).

Fehlermeldungen sind englischsprachig und können sich zwischen PHP-Versionen leicht ändern. Für Programmlogik sollte stets der numerische Code aus json_last_error() bzw. die Konstanten wie JSON_ERROR_SYNTAX verwendet werden, nicht der Textstring dieser Funktion.