php-如何确定字符串是否为有效JSON?

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

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

Spot asked 2020-08-06T20:39:37Z
6个解决方案
66 votes

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

通常,无论如何,null返回null

Daff answered 2020-08-06T20:39:47Z
17 votes

如何使用null,如果给定的字符串不是有效的JSON编码数据,则应返回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
Pascal MARTIN answered 2020-08-06T20:40:12Z
16 votes

对于我的项目,我使用此功能(请阅读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)";
}
cgaldiolo answered 2020-08-06T20:40:49Z
4 votes

json_decode()json_last_error()是否对您有用? 您是在寻找一种说“看起来像JSON”还是实际对其进行验证的方法? json_decode()是在PHP中有效验证它的唯一方法。

Kitson answered 2020-08-06T20:41:09Z
3 votes
$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"}' );
   }
McNally Paulo answered 2020-08-06T20:41:25Z
0 votes

这是最好,最有效的方法

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
Mohsin Hassan answered 2020-08-06T20:41:44Z
translate from https://stackoverflow.com:/questions/1187576/how-to-determine-whether-a-string-is-valid-json