---------------- 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.phpjson_validate
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
json_validate
Референца за `function.json-validate.php` со подобрена типографија и навигација.
json_validate
(PHP 8 >= 8.3.0)
json_validate — Проверува дали стринг содржи валиден JSON
= NULL
Враќа дали даденото string е синтаксички валиден JSON. Ако json_validate() returns true, json_decode()
успешно ќе го декодира дадениот стринг кога се користи истиот
depth and flags.
Враќа json_validate() returns false, причината може да се добие со користење на json_last_error() and
json_last_error_msg().
json_validate() користи помалку меморија од json_decode() ако декодираната JSON содржина не се користи, бидејќи не треба да се гради структурата на низата или објектот што ја содржи содржината.
Повикување json_validate() непосредно пред json_decode() непотребно ќе го парсира стрингот двапати, бидејќи json_decode() имплицитно врши валидација при декодирање.
json_validate() затоа треба да се користи само ако декодираната JSON содржина не се користи веднаш и е потребно да се знае дали стринг содржи валиден JSON.
Параметри
json-
Стрингот за валидација.
Оваа функција работи само со UTF-8 кодирани стрингови.
Забелешка:
PHP имплементира надсет на JSON како што е наведено во оригиналниот Bitmask кој се состои од.
depth-
Максимална длабочина на вгнездување на структурата што се декодира. Вредноста мора да биде поголема од
0, и помала или еднаква на2147483647. flags-
Моментално само
JSON_INVALID_UTF8_IGNOREсе прифаќа.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true ако дадениот стринг е синтаксички валиден JSON, инаку враќа false.
Errors/Exceptions
Враќа depth е надвор од дозволениот опсег, а ValueError се фрла.
Враќа flags не е валидно знаме, а ValueError се фрла.
Примери
Пример #1 json_validate() examples
<?php
var_dump(json_validate('{ "test": { "foo": "bar" } }'));
var_dump(json_validate('{ "": "": "" } }'));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
bool(true) bool(false)
Види Исто така
- json_decode() - Декодира JSON стринг
- json_last_error() - Враќа последна грешка што се случила
- json_last_error_msg() - Враќа низа за грешка од последниот повик на json_validate(), json_encode() или json_decode()
Белешки од корисници 3 белешки
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+.Please note that this will return true if the value is numerical, whether it's of type int/float, or a string. This is something to be aware of if you're expecting an array/object, which may cause issues down the line when handling it.