PHP 8.6 : Trouver la position d’une erreur JSON lors du décodage
PHP 8.6 apporte une amélioration mineure mais pratique pour le décodage JSON : il est désormais possible d'obtenir la position exacte de l'erreur en cas d'échec. Le débogage des payloads incorrects est ainsi grandement facilité.
Une amélioration mineure pour le JSON, mais très pratique
Traditionnellement, lorsque json_decode() échoue, PHP indique depuis longtemps qu’une erreur s’est produite, mais pas où le problème se trouve dans l’entrée. Avec PHP 8.6, un changement s'opère : vous pouvez récupérer la position de l’erreur lors d’un échec de décodage JSON et localiser plus rapidement les payloads incorrects.
C’est particulièrement utile quand vous travaillez avec des payloads d’API, des webhooks ou des fichiers de configuration, où il suffit d’un guillemet ou d’une virgule manquants pour casser tout le document.
Avant et après
Avant PHP 8.6, il fallait généralement inspecter le JSON brut manuellement ou journaliser le payload pour chercher soi-même l’origine du problème :
$json = '{"name": "Alice", "age": 30,}';
data = json_decode($json, true);
if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
echo json_last_error_msg();
}
Le message vous indique qu’il y a une erreur de syntaxe, mais pas où elle s’est produite.
Avec PHP 8.6, vous pouvez aussi demander la position de l’erreur et l’utiliser pour repérer le problème plus vite :
$json = '{"name": "Alice", "age": 30,}';
$data = json_decode($json, true);
if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
echo json_last_error_msg() . PHP_EOL;
echo 'Error position: ' . json_last_error_pos();
// Syntax error
// Error position: 28
}
Cette position permet d’examiner les caractères environnants dans le payload et de repérer immédiatement l’erreur.
Pourquoi c’est important
Même si ce n’est pas une fonctionnalité phare, c’est le genre d’amélioration qui fait gagner du temps au quotidien lors du débogage :
un diagnostic plus rapide des JSON incorrects
moins de temps perdu à parcourir de gros payloads
un meilleur logging et une meilleure observabilité dans les intégrations d’API
Si votre application traite régulièrement du JSON externe, cet ajout, même modeste, peut vous faire gagner un temps considérable.