Как определить, является ли строка допустимой в формате JSON?
-
19-09-2019 - |
Вопрос
Кто-нибудь знает о надежном (и пуленепробиваемом) фрагменте функции is_JSON для PHP?У меня (очевидно) есть ситуация, когда мне нужно знать, является ли строка JSON или нет.
Хм, возможно, прогнать это через JSONLint запрос / ответ, но это кажется немного излишним.
Решение
Если вы используете встроенный json_decode
Функция PHP, json_last_error
возвращает последнюю ошибку (например, JSON_ERROR_SYNTAX
когда ваша строка не была JSON).
Обычно json_decode
ВОЗВРАТ null
в любом случае.
Другие советы
Как насчет использования json_decode
, который должен вернуть null
если данная строка не была допустимыми данными в JSON-кодировке?
Смотрите пример 3 на странице руководства :
// the following strings are valid JavaScript but not valid JSON
// the name and value must be enclosed in double quotes
// single quotes are not valid
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null
// the name must be enclosed in double quotes
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null
// trailing commas are not allowed
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null
Для своих проектов я использую эту функцию (пожалуйста, прочтите "Примечание" на json_decode() документы).
Передавая те же аргументы, которые вы передали бы в json_decode(), вы можете обнаружить "ошибки" конкретного приложения (напримерошибки глубины)
С PHP >= 5.6
// PHP >= 5.6
function is_JSON(...$args) {
json_decode(...$args);
return (json_last_error()===JSON_ERROR_NONE);
}
С PHP >= 5.3
// PHP >= 5.3
function is_JSON() {
call_user_func_array('json_decode',func_get_args());
return (json_last_error()===JSON_ERROR_NONE);
}
Пример использования:
$mystring = '{"param":"value"}';
if (is_JSON($mystring)) {
echo "Valid JSON string";
} else {
$error = json_last_error_msg();
echo "Not valid JSON string ($error)";
}
Не делает json_decode()
с помощью json_last_error()
работать на вас?Вы ищете просто способ сказать "похоже ли это на JSON" или фактически подтвердить это? json_decode()
это был бы единственный способ эффективно проверить это в PHP.
$this->post_data = json_decode( stripslashes( $post_data ) ); if( $this->post_data === NULL ) { die( '{"status":false,"msg":"The post_data parameter must be valid JSON"}' ); }
Это лучший и эффективный способ
function isJson($string) {
return (json_decode($string) == null) ? false : true;
}