Не удалось проверить пустой объект json в PHP

#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 (), чтобы выяснить, в чем была проблема.