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

Кто-нибудь знает о надежном (и пуленепробитом) фрагменте функции is_JSON для PHP? У меня (очевидно) есть ситуация, когда мне нужно знать, является ли строка JSON или нет.

Хм, возможно, запустите его через запрос / ответ JSONLint , но это кажется немного излишним.

Если вы используете встроенную json_decode PHP json_decode , 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": "Параметр post_data должен быть действительным JSON"}');
    }