如何判断一个字符串是否是有效的JSON?

发布于 2024-07-29 08:25:15 字数 172 浏览 7 评论 0原文

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

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

Does anyone know of a robust (and bullet proof) is_JSON function snippet for PHP? I (obviously) have a situation where I need to know if a string is JSON or not.

Hmm, perhaps run it through a JSONLint request/response, but that seems a bit overkill.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

紫南 2024-08-05 08:25:15

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

通常 json_decode 返回 null< /代码> 无论如何。

If you are using the built in json_decode PHP function, json_last_error returns the last error (e.g. JSON_ERROR_SYNTAX when your string wasn't JSON).

Usually json_decode returns null anyway.

没有伤那来痛 2024-08-05 08:25:15

对于我的项目,我使用此函数(请阅读 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)";
}

For my projects I use this function (please read the "Note" on the json_decode() docs).

Passing the same arguments you would pass to json_decode() you can detect specific application "errors" (e.g. depth errors)

With PHP >= 5.6

// PHP >= 5.6
function is_JSON(...$args) {
    json_decode(...$args);
    return (json_last_error()===JSON_ERROR_NONE);
}

With 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);
}

Usage example:

$mystring = '{"param":"value"}';
if (is_JSON($mystring)) {
    echo "Valid JSON string";
} else {
    $error = json_last_error_msg();
    echo "Not valid JSON string ($error)";
}
攒一口袋星星 2024-08-05 08:25:15

使用 json_decode 怎么样,如果给定的字符串不是有效的 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

What about using json_decode, which should return null if the given string was not valid JSON-encoded data ?

See example 3 on the manual page :

// 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
迷你仙 2024-08-05 08:25:15

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

Doesn't json_decode() with a json_last_error() work for you? Are you looking for just a method to say "does this look like JSON" or actually validate it? json_decode() would be the only way to effectively validate it within PHP.

度的依靠╰つ 2024-08-05 08:25:15

这是最好、最有效的方法

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}

This is the best and efficient way

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
热鲨 2024-08-05 08:25:15
$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"}' );
   }
$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"}' );
   }
鹤仙姿 2024-08-05 08:25:15

json_validate() 将在 PHP 8.3 中上线

json_validate() will Be live in PHP 8.3

谁人与我共长歌 2024-08-05 08:25:15

最后! 从 PHP 8.3 开始,可以使用新的 PHP 8.3。 php.net/manual/en/function.json-validate.php" rel="nofollow noreferrer">json_validate() 函数:

$fixtures = [
    // Not valid
    'foo',
    '{foo: bar}',
    "'{'foo': 'bar'}",
    '{...}',

    // Valid
    '"foo"',
    '1',
    '{"foo": "bar"}',
];

foreach ($fixtures as $string) {
    if (json_validate($string)) {
        echo sprintf('YES, >%s< is a valid JSON string', $string).PHP_EOL;
        echo 'decoded: '. var_export(json_decode($string), true).PHP_EOL;
    } else {
        echo sprintf('NO, >%s< is NOT a valid JSON string: %s', $string, json_last_error_msg()). PHP_EOL;
    }
}

该函数仅接受字符串作为第一个参数: 此代码段的输出

Finally! As of PHP 8.3 one can use the new json_validate() function:

$fixtures = [
    // Not valid
    'foo',
    '{foo: bar}',
    "'{'foo': 'bar'}",
    '{...}',

    // Valid
    '"foo"',
    '1',
    '{"foo": "bar"}',
];

foreach ($fixtures as $string) {
    if (json_validate($string)) {
        echo sprintf('YES, >%s< is a valid JSON string', $string).PHP_EOL;
        echo 'decoded: '. var_export(json_decode($string), true).PHP_EOL;
    } else {
        echo sprintf('NO, >%s< is NOT a valid JSON string: %s', $string, json_last_error_msg()). PHP_EOL;
    }
}

This function only accepts a string as the first argument: output of this snippet

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文