En PHP comment savoir si un flux JSON contient des erreurs ?

Réponses rédigées par Antoine
Dernière mise à jour : 2021-02-17 12:57:37
Thèmes : php - json
Question

Bonjour, j'utilise les fonctions PHP json_encode et json_decode pour manipuler des données JSON. Comment puis-je vérifier que ces données sont correctement formatées en JSON et qu'il n'y a pas d'erreurs ?

Par exemple comment détecter que le flux JSON suivant n'est pas correctement formaté :

['JSON mal formaté
Réponse

Pour vérifier qu'un flux de données JSON est correctement formaté, en PHP, vous pouvez utiliser la CLASS JSON_THROW_ON_ERROR.

Par défaut, json_decode() renverra null lorsqu'il aura passé une chaîne JSON non valide. Cela pose un problème car un null isolé est une chaîne JSON valide. Vous n'avez aucun moyen de savoir si la valeur de retour null est due au JSON contenant null, ou parce que le flux JSON était mal formé et n'a pas pu être analysé.

PHP 7.3 a finalement résolu ce problème en ajoutant l'indicateur JSON_THROW_ON_ERROR.

json_decode("['JSON mal formaté", true, 512, JSON_THROW_ON_ERROR);

Vous pouvez également utiliser les arguments nommés de PHP 8 pour simplifier un peu les choses, car vous n'aurez pas besoin de transmettre des valeurs explicites pour les paramètres facultatifs :

json_decode(json:"['JSON mal formaté", flags: JSON_THROW_ON_ERROR);

Remarque : les constantes d'erreurs PHP sont listées sur cette page, vous trouverez par ailleurs d'avantage d'informations sur JSON_THROW_ON_ERROR via cette autre page.