46

有谁知道 PHP 的健壮(和防弹) is_JSON 函数片段?我(显然)有一种情况,我需要知道一个字符串是否为 JSON。

嗯,也许通过JSONLint请求/响应来运行它,但这似乎有点矫枉过正。

4

6 回答 6

71

如果您使用的是内置json_decodePHP 函数,json_last_error则返回最后一个错误(例如JSON_ERROR_SYNTAX,当您的字符串不是 JSON 时)。

通常无论如何json_decode都会返回。null

于 2009-07-27T11:02:34.577 回答
19

对于我的项目,我使用此功能(请阅读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)";
}
于 2015-03-25T18:11:20.527 回答
17

如果给定的字符串不是有效的 JSON 编码数据,那么使用json_decode应该返回什么?null

请参阅手册页上的示例 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
于 2009-07-27T11:02:01.363 回答
4

json_decode()适合json_last_error()你吗?您是否只是在寻找一种方法来表达“这看起来像 JSON”还是实际验证它?json_decode()将是在 PHP 中有效验证它的唯一方法。

于 2009-07-27T11:05:09.127 回答
4

这是最好和最有效的方法

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
于 2019-08-16T15:36:49.603 回答
3
$this->post_data = json_decode(stripslashes($post_data));
  如果($this->post_data === NULL)
   {
   die( '{"status":false,"msg":"post_data 参数必须是有效的 JSON"}' );
   }
于 2010-10-28T18:01:02.877 回答