json_last_error / json_last_error_msg în PHP

JSON PHP 5.3+ (json_last_error_msg: PHP 5.5+)

Returnează codul erorii de la ultimul apel json_encode, json_decode sau json_validate. json_last_error_msg dă mesajul.

Sintaxă
json_last_error(): int

Ce face json_last_error / json_last_error_msg

json_decode returnează null și pentru JSON invalid, și pentru textul valid "null". Ca să știi sigur dacă a fost o eroare, verifici json_last_error(): JSON_ERROR_NONE (0) înseamnă că totul a mers.

json_last_error_msg() returnează descrierea erorii, în engleză, de exemplu "Syntax error" sau "Malformed UTF-8 characters, possibly incorrectly encoded". Ambele funcții se referă doar la ultimul apel JSON.

Alternativa modernă este opțiunea JSON_THROW_ON_ERROR, care aruncă o excepție JsonException în loc să lase eroarea în această stare globală.

Ce returnează

Codul erorii (JSON_ERROR_NONE, JSON_ERROR_SYNTAX, JSON_ERROR_UTF8, JSON_ERROR_DEPTH etc.). json_last_error_msg returnează textul erorii.

Exemple

Exemplul 1: Verificarea după json_decode

<?php
$date = json_decode("{nume: Ana}", true);

if (json_last_error() !== JSON_ERROR_NONE) {
    echo "Eroare " . json_last_error() . ": " . json_last_error_msg() . "\n";
}

json_decode('{"nume": "Ana"}', true);
echo json_last_error_msg();

Rezultat

Eroare 4: Syntax error
No error

Exemplul 2: null valid sau eroare?

<?php
foreach (["null", "nul"] as $json) {
    $rezultat = json_decode($json);
    echo var_export($rezultat, true) . " => " . json_last_error_msg() . "\n";
}

Rezultat

NULL => No error
NULL => Syntax error

Exemplul 3: Text cu codare greșită la json_encode

<?php
$text = "Ia\xC8"; // un caracter UTF-8 tăiat la jumătate

var_dump(json_encode(["oras" => $text]));
echo json_last_error_msg();

Rezultat

bool(false)
Malformed UTF-8 characters, possibly incorrectly encoded

Greșeli frecvente

  • Verifici eroarea după alt apel JSON. Fiecare apel json_encode/json_decode resetează starea, deci verifică imediat după apelul care te interesează.
  • Verifici doar $date === null. Textul JSON "null" este valid și dă tot null.

Comenzi înrudite

  • json_decode: Transformă un text JSON în tablou sau obiect PHP.
  • json_encode: Transformă un tablou sau obiect PHP în text JSON.
  • json_validate: Verifică dacă un text este JSON valid, fără să îl decodeze. Mai rapidă și cu memorie mai puțină decât json_decode.