PHP 8.6 : Trouver la position d’une erreur JSON lors du décodage

· Oskar Stark · Expertise · Temps de lecture: 1 minute
Abstract editorial illustration of PHP 8.6 JSON parsing with a highlighted error position and subtle purple accents

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 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.

Sources

Besoin d’aide pour une mise à niveau sur PHP ?

Si vous préparez une mise à niveau de PHP ou souhaitez rendre vos applications Symfony et PHP plus faciles à maintenir, SensioLabs peut vous accompagner avec des audits, des ateliers et un support concret.

Cela pourrait aussi vous intéresser

Large tree under the sunlight
Mathieu Santostefano

Multipliez votre vitesse de développement avec l’IA grâce aux Git Worktrees

Fini le jonglage fastidieux entre git stash et les réinstallations de dépendances. Découvrez comment les Git Worktrees révolutionnent votre expérience développeur en permettant à vos agents IA de travailler sur une branche isolée pendant que vous restez concentré sur votre code. Une méthode indispensable pour mener vos tâches en parallèle et multiplier votre vitesse d'exécution sans friction.

En savoir plus : Multipliez votre vitesse de développement avec l’IA grâce aux Git Worktrees
A man sculpting a rock with PDF written on it
Steven Renaux

Créer un Custom Builder - L'histoire du GotenbergBundle

Nous avons déjà vu comment générer un fichier PDF en quelques lignes de code à l'aide de Gotenberg et de GotenbergBundle, un bundle Symfony. Mais que faire lorsque votre application doit générer plusieurs fichiers PDF différents, chacun avec sa propre mise en page, ses propres styles et ses propres données ?

En savoir plus : Créer un Custom Builder - L'histoire du GotenbergBundle
Paper notes on a wall
Imen Ezzine

Plongée dans les coulisses de trois cérémonies collaboratives

A la suite d’un post sur LinkedIn, j’ai pensé à écrire cet article pour décrire 3 cérémonies qui m’ont marquée et que j’ai adorées pendant l’une de mes dernières missions : Event Storming, Example Mapping et Domain Storytelling.

En savoir plus : Plongée dans les coulisses de trois cérémonies collaboratives
Why PHP?
Silas Joisten

Pourquoi PHP est le meilleur choix pour le backend des logiciels d'entreprise ?

Découvrez pourquoi PHP est une technologie de premier plan pour les applications d'entreprise. Il offre des performances élevées, dispose d'un vaste écosystème de développeurs, permet de réduire les coûts opérationnels et fait preuve d'une fiabilité éprouvée.

En savoir plus : Pourquoi PHP est le meilleur choix pour le backend des logiciels d'entreprise ?
PHP 8.5 URI extension
Oskar Stark

La nouvelle extension URI de PHP 8.5 : Une révolution pour l'analyse des URL

PHP 8.5 introduit une nouvelle extension URI puissante qui modernise la gestion des URL. Grâce au support des standards RFC 3986 et WHATWG, la nouvelle classe Uri fournit des objets immuables, des interfaces fluides et une validation appropriée, résolvant ainsi toutes les limites de la fonction historique parse_url(). Cet articl présente des exemples pratiques avant/après et explique quand utiliser chaque standard.

En savoir plus : La nouvelle extension URI de PHP 8.5 : Une révolution pour l'analyse des URL
Open in new tab
Silas Joisten

Le piège des onglets: pourquoi forcer l'ouverture de nouveaux onglets est une mauvaise pratique en UX

Nous l'avons tous fait — ajouter target="_blank" à un lien pour « aider les utilisateurs » à rester sur notre site. Mais ce qui semble être une commodité inoffensive crée souvent de la confusion, diminue l'accessibilité et introduit des risques de sécurité cachés.

En savoir plus : Le piège des onglets: pourquoi forcer l'ouverture de nouveaux onglets est une mauvaise pratique en UX
3 dog heads
Mathieu Santostefano

Venez avec votre propre client HTTP

Libérez-vous des dépendances rigides de vos SDK PHP. Dans cet article, apprenez à utiliser les normes PSR-7, PSR-17 et PSR-18, ainsi que la bibliothèque php-http/discovery, pour permettre à vos utilisateurs d'utiliser le client HTTP de leur choix, qu'il s'agisse de Guzzle, de Symfony HttpClient ou d'un autre. Un incontournable pour les développeurs PHP et Symfony.

En savoir plus : Venez avec votre propre client HTTP
Blue sign on a building with several Now What? letters
Thibaut Chieux

Comment prioriser les messages lors du développement d'applications asynchrones avec Symfony Messenger

Le traitement asynchrone offre des avantages tels que la découplage des processus et des temps de réponse plus rapides, mais la gestion des priorités des messages peut s'avérer complexe. Pour traiter des tâches allant de la réinitialisation de mot de passe à des exports complexes, il est essentiel de garantir la livraison rapide des messages critiques. Cet article examine les problèmes fréquents liés au traitement asynchrone et propose des solutions avec Symfony Messenger pour optimiser votre application sans refonte majeure.

En savoir plus : Comment prioriser les messages lors du développement d'applications asynchrones avec Symfony Messenger