Как определить, является ли строка действительной JSON?

Кто-нибудь знает о надежном (и пуленепробитом) фрагменте функции 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;
}