#php #laravel
Вопрос:
Удивительно, validate_json
но функция возвращает значение false для пустого объекта json;
$empty_json_obj = "{}";
if(validate_json($empty_json_obj)) {
print_r("VALID");
}
else {
print_r("NOT VALID");
}
Выход NOT VALID
функция validate_json
function validate_json($data) {
if ( ! $data) {
return FALSE;
}
$result = (array) json_decode($data);
if ( ! is_array($result) || count($result) < 1) {
return FALSE;
}
return TRUE;
}
Как сделать это правильно, чтобы правильно validate_json
идентифицировать пустой json, переданный как json
Комментарии:
1. Добавлена функция @Yoshi validate_json
2. Вы пытались отладить свою функцию? Вероятно
count($results) < 1
, это дает вам ложь для пустого объекта json…3. @AdityaRewari Как будет выглядеть допустимый json? Вы хотите знать, является ли это допустимым json в целом или в соответствии с некоторыми вашими спецификациями ?
Ответ №1:
Если вы просто хотите проверить, является ли содержимое данной строки допустимым JSON или нет, это довольно просто.
На странице руководства для json_decode написано:
значение null возвращается, если json не может быть декодирован или если закодированные данные глубже предела вложенности.
Поэтому все, что вам действительно нужно сделать, это проверить null
. Приведение к массивам и т. Д. Не требуется (и не каждый фрагмент допустимого JSON в любом случае можно преобразовать в массив — объекты также очень распространены).
function validate_json($data) {
if ( ! $data) {
return FALSE;
}
$result = json_decode($data);
if ($result === null) {
return FALSE;
}
return TRUE;
}
N. B. Если проверка не удалась, вы можете использовать json_last_error() и/или json_last_error_msg (), чтобы выяснить, в чем была проблема.