Signatur
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
"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);
}
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();
}
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();
}
// 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.