Кто-нибудь знает о надежном (и пуленепробитом) фрагменте функции is_JSON для PHP? У меня (очевидно) есть ситуация, когда мне нужно знать, является ли строка JSON или нет.
Хмм, возможно, запустите его через JSONLint запрос/ответ, но это кажется немного переборщиком.
Ответ 1
Если вы используете встроенную функцию json_decode
PHP, json_last_error
возвращает последнюю ошибку (например, JSON_ERROR_SYNTAX
, когда ваша строка не была JSON).
Обычно json_decode
возвращает null
в любом случае.
Ответ 2
Как насчет использования 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
Ответ 3
Для моих проектов я использую эту функцию (пожалуйста, прочитайте Примечание "в json_decode() docs).
Передавая те же аргументы, которые вы передадите 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)";
}
Ответ 4
Не работает ли json_decode()
с json_last_error()
? Вы ищете только метод, чтобы сказать "это похоже на JSON" или действительно проверить его? json_decode()
будет единственным способом эффективной проверки его в PHP.
Ответ 5
$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"}' );
}
Ответ 6
Это самый лучший и эффективный способ
function isJson($string) {
return (json_decode($string) == null) ? false : true;
}