PHP Velho Oeste 2024

json_validate

(PHP 8 >= 8.3.0)

json_validateПроверяет, содержит ли строка допустимый JSON

Описание

json_validate(string $json, int $depth = 512, int $flags = 0): bool

Возвращает результат проверки соответствия формата входной строки (string) допустимому JSON. Если функция json_validate() вернёт true, функция json_decode() успешно декодирует входную строку при использовании тех же параметров depth и flags.

Если функция json_validate() вернёт false, причину можно будет установить с помощью функции json_last_error() и json_last_error_msg().

Функция json_validate() использует меньше памяти, чем функция json_decode(), поскольку ей не нужно декодировать полезную нагрузку JSON или создавать содержащую её структуру массива или объекта.

Предостережение

Вызов функции json_validate() непосредственно перед функцией json_decode() приведёт к ненужному двойному разбору строки, поскольку функция json_decode() неявно выполняет такую проверку во время декодирования.

Использовать функцию json_validate() надо только в случае, когда данные декодирования полезной нагрузки JSON не нужно использовать немедленно, и необходимо знать, содержит ли строка допустимый JSON.

Список параметров

json

Строка для проверки.

Эта функция работает только со строками в кодировке UTF-8.

Замечание:

PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.

depth

Максимальная глубина вложенности структуры, для которой будет производиться декодирование. Значение должно быть больше 0 и меньше или равно 2147483647.

flags

В настоящее время принимается только JSON_INVALID_UTF8_IGNORE.

Возвращаемые значения

Возвращает true, если входная строка является синтаксически допустимым JSON, или false в противном случае.

Ошибки

Если значение параметра depth выходит за пределы допустимого диапазона, будет выброшено исключение ValueError.

Если значение параметра flags — недопустимый флаг, будет выброшено исключение ValueError.

Примеры

Пример #1 Пример использования json_validate()

<?php
var_dump
(json_validate('{ "test": { "foo": "bar" } }'));
var_dump(json_validate('{ "": "": "" } }'));
?>

Результат выполнения приведённого примера:

bool(true)
bool(false)

Смотрите также

  • json_decode() - Декодирует строку JSON
  • json_last_error() - Возвращает последнюю ошибку
  • json_last_error_msg() - Возвращает строку с сообщением об ошибке последнего вызова json_encode() или json_decode()

add a note add a note

User Contributed Notes 3 notes

up
8
Behrad
4 months ago
---------------- PHP < 8.3 ----------------

function json_validate(string $string): bool {
    json_decode($string);

    return json_last_error() === JSON_ERROR_NONE;
}

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

---------------- PHP >= 8.3 ----------------

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

Note: code from https://www.php.net/releases/8.3/en.php
up
1
Julien T.
3 months ago
Building upon Allan R.'s initial idea, I've developed an improved version of the json_validate function for those using PHP 8.2 and earlier versions. This function emulates the functionality introduced in PHP 8.3, providing an effective way to validate JSON strings in earlier PHP versions.

```php
if (!function_exists('json_validate')) {
    /**
     * Validates a JSON string.
     *
     * @param string $json The JSON string to validate.
     * @param int $depth Maximum depth. Must be greater than zero.
     * @param int $flags Bitmask of JSON decode options.
     * @return bool Returns true if the string is a valid JSON, otherwise false.
     */
    function json_validate($json, $depth = 512, $flags = 0) {
        if (!is_string($json)) {
            return false;
        }

        try {
            json_decode($json, false, $depth, $flags | JSON_THROW_ON_ERROR);
            return true;
        } catch (\JsonException $e) {
            return false;
        }
    }
}
```

Key Improvements:

- String Check: Added a validation to ensure the input is a string.
- Error Handling: Utilizes try-catch to effectively catch and handle JsonException.
- Backward Compatibility: Safely integrable in older PHP versions, automatically deferring to native functionality in PHP 8.3+.
up
0
Allan R.
3 months ago
Pre PHP 8.3, and future compatible, function/wrapper

---
if(!function_exists("json_validate")) {
    function json_validate() {
        try {
            json_decode($json, JSON_THROW_ON_ERROR);
            return true;
        } catch(\JsonException) {
            return false;
        }
    }
}
---

An issue with simply relying on json_last_error() == JSON_ERROR_NONE is if you have an error handler that catches errors or notices and throws them instead as  fx. \ErrorException

That would cause a call to json_decode(); to throw an exception exiting the scope of the function.
To Top