如何判断一个字符串是不是是有效的 JSON?
Posted
技术标签:
【中文标题】如何判断一个字符串是不是是有效的 JSON?【英文标题】:How to determine whether a string is valid JSON?如何判断一个字符串是否是有效的 JSON? 【发布时间】:2010-11-14 07:50:45 【问题描述】:有谁知道 php 的健壮(和防弹)is_JSON 函数 sn-p 吗?我(显然)有一种情况,我需要知道一个字符串是否是 JSON。
嗯,也许通过JSONLint 请求/响应来运行它,但这似乎有点矫枉过正。
【问题讨论】:
射击;我有一个方便的防弹解决方案,但它不是很强大,所以我不得不放弃它:P 【参考方案1】:如果您使用内置的json_decode
PHP 函数,json_last_error
返回最后一个错误(例如,JSON_ERROR_SYNTAX
当您的字符串不是 JSON 时)。
通常json_decode
无论如何都会返回null
。
【讨论】:
是的,我是个白痴。这很明显,我只是错过了。我可以把它包装成我需要的东西。谢谢。 在大多数情况下是可靠的解决方案,但要小心。 json_decode 也可以解析例如数字字符串。字符串中的电话号码将被转换为整数。但是,这不会发生在每台服务器上。在我的 Windows 机器上我得到整数,在 linux 开发系统上我得到错误。我认为这取决于您的 PHP 安装和配置 正如 StoryTeller 提到的 - json_decode("51232") 的计算结果为 51232,因此可能并非在所有情况下都有用【参考方案2】:对于我的项目,我使用此功能(请阅读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)";
【讨论】:
我不是 PHP 专家,但这个解决方案似乎效率不高,因为当需要 JSON 解码时,它会执行两次:一次是在测试字符串是否为有效 JSON 时,然后第二次实际解码时。假设 json_decode 已经执行,让这个函数只检查最后一个 JSON 错误似乎更明智。我欢迎其他意见。 嗨@LiranH,原始发布者请求了一个'is_JSON'函数,因此我不能在函数中假设json_decode只是在请求的字符串上执行。在这种情况下,您的函数将被命名为“is_last_json_decoded_string_a_JSON_string”。 这很公平@cgaldiolo 尝试了你的 PHP PHP Fatal error: func_get_args(): Can't be used as a function parameter。只需在 func def 中定义参数 嗨@KolobCanyon,这是因为您使用的是PHP = 5.3,因为函数 json_last_error() 从该版本开始可用。我正在更新答案,谢谢。【参考方案3】:如果给定的字符串不是有效的 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
【讨论】:
"null" 是有效的 JSON,但是它也会返回 null。只是吹毛求疵!【参考方案4】:json_decode()
和 json_last_error()
不适合您吗?您是否只是在寻找一种方法来表达“这看起来像 JSON”还是实际验证它? json_decode()
将是在 PHP 中有效验证它的唯一方法。
【讨论】:
【参考方案5】:这是最好最有效的方法
function isJson($string)
return (json_decode($string) == null) ? false : true;
【讨论】:
【参考方案6】: $this->post_data = json_decode(stripslashes($post_data)); 如果($this->post_data === NULL) die( '"status":false,"msg":"post_data 参数必须是有效的 JSON"' );【讨论】:
以上是关于如何判断一个字符串是不是是有效的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中检查字符串是不是是有效的 JSON?