Checking if a string contains valid JSON with PHP

Published on 2024-02-07 • Modified on 2024-02-07

This snippet shows how to check if a string contains valid JSON with PHP. This function was introduced in PHP 8.3 to avoid using json_decode or to catch an exception when using the JSON_THROW_ON_ERROR flag. The json_last_error_msg function still works to get the exact error message regarding the validation failure. Note that this function only accepts a string as the first argument.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * I am using a PHP trait to isolate each snippet in a file.
 * This code should be called from a Symfony controller extending AbstractController (as of Symfony 4.2)
 * or Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Services are injected in the main controller constructor.
 */
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! 😁
    }
}

 Run this snippet  More on Stackoverflow   Read the doc  More on the web  Random snippet

  Work with me!