Vérifier si une chaîne contient du JSON valide avec PHP

Publié le 07/02/2024 • Actualisé le 07/02/2024


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment vérifier si une chaîne contient du JSON valide avec PHP. Cette fonction a été introduite dans PHP 8.3 pour éviter d'utiliser json_decode ou d'interception une exception quand on utilise le drapeau JSON_THROW_ON_ERROR. La fonction json_last_error_msg fonctionne aussi dans ce cas pour récupérer le message d'erreur exact correspondant à l'erreur de validation.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet289Trait
{
    public function snippet289(): void
    {
        $fixtures = [
            // Not valid
            'foo',
            '{foo: bar}',
            "'{'foo': 'bar'}",
            '{...}',

            // Valid
            '"foo"',
            '1',
            '{"foo": "bar"}',
        ];

        foreach ($fixtures as $string) {
            if (json_validate($string)) {
                echo \sprintf('YES, >%s< is a valid JSON string', $string).PHP_EOL;
                echo 'decoded: '.var_export(json_decode($string), true).PHP_EOL;
            } else {
                echo \sprintf('NO, >%s< is NOT a valid JSON string: %s', $string, json_last_error_msg()).PHP_EOL;
            }
        }

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Plus sur le web  Snippet aléatoire

  Travaillez avec moi !