В версии PHP 8.3 появилась удобная функция для проверки корректности json строки.
Ранее, чтобы проверить валидность json строки требовалось вызвать json_decode(), теперь же в этом нет необходимости:
// до версии 8.3
$string = '{"foo": 123}';
function isValidJson(string $string): bool {
json_decode($string);
return json_last_error() === JSON_ERROR_NONE;
}
var_dump(isValidJson($string)); // true
// начиная с версии 8.3+
var_dump(json_validate($string)); // true
Хорошим вариантом будет использование встроенных функций для получения ошибки валидации json строки, например для создания Exception с деталями, что пошло не так:
if (json_validate($_GET['json']) === false) {
throw new \JsonException(json_last_error_msg(), json_last_error());
}
$res = json_decode($_GET['json']);