Durante l'uso di json_encode() e json_decode() può capitare che l'operazione fallisca. PHP fornisce due funzioni molto utili per capire la causa dell'errore:
- json_last_error() – restituisce un codice numerico di errore.
- json_last_error_msg() – restituisce una descrizione testuale dell'errore.
Sintassi
int json_last_error(): int
string json_last_error_msg(): string
json_last_error() restituisce un codice numerico che identifica l'errore, mentre json_last_error_msg() fornisce la descrizione leggibile dell'errore più recente avvenuto durante la codifica o decodifica JSON.
Esempio base
<?php
$json = "{nome: 'Luca', eta: 18}"; // JSON non valido
$result = json_decode($json);
if ($result === null) {
echo "Errore JSON: " . json_last_error_msg();
}
?>
Output: Errore JSON: Syntax error
Elenco dei principali errori JSON
| Codice | Messaggio | Descrizione |
|---|---|---|
| JSON_ERROR_NONE | No error | Nessun errore |
| JSON_ERROR_DEPTH | Maximum stack depth exceeded | Profondità massima superata |
| JSON_ERROR_STATE_MISMATCH | Underflow or the modes mismatch | Formato JSON non coerente |
| JSON_ERROR_CTRL_CHAR | Unexpected control character found | Carattere di controllo non valido trovato |
| JSON_ERROR_SYNTAX | Syntax error | Errore di sintassi (JSON malformato) |
| JSON_ERROR_UTF8 | Malformed UTF-8 characters | Problema di codifica UTF-8 nei caratteri |
| JSON_ERROR_RECURSION | Recursion detected | Riferimento circolare negli array/oggetti |
| JSON_ERROR_INF_OR_NAN | Inf or NaN | Valore non numerico o infinito |
| JSON_ERROR_UNSUPPORTED_TYPE | Type is not supported | Tipo di dato non supportato da json_encode() |
Esempio pratico con gestione dell'errore
<?php
$dati = ["file" => tmpfile()]; // Risorsa non codificabile
$json = json_encode($dati);
if ($json === false) {
echo "Errore nella codifica JSON: " . json_last_error_msg();
}
?>
Output: Errore nella codifica JSON: Type is not supported
LABORATORIO
Visualizzazione e comprensione degli errori JSON
In questo laboratorio sperimenterai diversi tipi di errori JSON per comprendere i messaggi restituiti da json_last_error_msg(). Vedrai in pratica come PHP reagisce a JSON malformati o contenenti dati non validi.
- Uso di json_last_error() e json_last_error_msg().
- Simulazione di errori durante la decodifica JSON.
- Analisi e interpretazione dei messaggi di errore.
- Riconoscimento delle principali cause di errore.
- Editor PHP (VS Code, Notepad++)
- Server locale (XAMPP, MAMP o Laragon)
- Browser per visualizzare l'output
1 Creazione del file json_errori.php
Scrivi questo codice per testare vari casi di errore JSON:
<?php
$test = [
"JSON corretto" => '{"nome":"Luca","eta":18}',
"Errore di sintassi" => '{nome:"Luca",eta:18}',
"Caratteri non UTF-8" => "\xB1\x31",
"Profondità massima superata" => json_encode([[[[[[[[1]]]]]]]]),
"Tipo non supportato" => json_encode(["f" => tmpfile()]),
];
echo "<h2>Test degli errori JSON</h2>";
echo "<table border='1' cellpadding='6'>";
echo "<tr><th>Caso</th><th>Descrizione errore</th></tr>";
foreach ($test as $nome => $json) {
// Decodifica solo se è una stringa JSON
if (is_string($json)) {
json_decode($json);
}
echo "<tr><td><b>$nome</b></td><td>" . json_last_error_msg() . "</td></tr>";
}
echo "</table>";
?>
2 Analisi del risultato
Dopo l'esecuzione del file, vedrai una tabella con la colonna “Descrizione errore”. Prova ad aggiungere o modificare i casi per esplorare altri tipi di errori.
- Prova a passare valori numerici infiniti (
INF) oNANin json_encode(). - Inserisci volontariamente virgolette mancanti o parentesi errate nel JSON.
- Osserva come cambia il messaggio di errore in base alla gravità del problema.