我尝试处理通过json_decode()解析时的错误json数据。我使用以下脚本:
if(!json_decode($_POST)) {
echo "bad json data!";
exit;
}
如果$_POST等于:
'{ bar: "baz" }'
然后json_decode很好地处理错误,并吐出“bad json data!";但是,如果我将$_POST设置为类似于“无效数据”的内容,它会给我:
Warning: json_decode() expects parameter 1 to be string, array given in C:\server\www\myserver.dev\public_html\rivrUI\public_home\index.php on line 6
bad json data!
我是否需要编写一个自定义脚本来检测有效的json数据,或者是否有其他一些漂亮的方法来检测它?
8条答案
按热度按时间wh6knrhe1#
以下是关于
json_decode
的几点说明:null
null
:当JSON字符串包含null
时要解决警告问题,一个解决方案是使用
@
operator(我不经常推荐使用它,因为它会使调试更加困难...但在这里,没有太多的选择):然后,您必须测试
$data
是否为null
--并且,为了避免json_decode
在JSON字符串中为null
返回null
的情况,您可以检查json_last_error
,其中 (引号):返回上次JSON解析发生的最后一个错误(如果有)。
这意味着您必须使用如下代码:
34gzjxbg2#
qco9c6ql3#
您也可以使用json_last_error:http://php.net/manual/en/function.json-last-error.php
文件上说:
返回上次JSON编码/解码期间发生的最后一个错误(如果有)。
下面是一个示例
s8vozzvw4#
这是Guzzle处理json的方式
o0lyfsai5#
我刚刚打破了我的头上的一个json语法错误,在什么似乎是完美的json:
{"test1":"car", "test2":"auto"}
从url编码的字符串。但在我的例子中,上面的一些是html编码的,因为添加
html_entity_decode($string)
就可以了。希望这能为别人节省一些时间。
nvbavucw6#
我刚刚花了一个小时浏览了这个页面上所有可能的解决方案。我冒昧地把所有这些可能的解决方案集合到一个函数中,使它更快更容易地尝试和调试。
我希望它能对别人有用。
我将在这里维护它:https://github.com/zethodderskov/decontaminate-text-in-php/blob/master/decontaminate-text-preparing-it-for-json-decode.php
6l7fqoea7#
h4cxqtbf8#
对于PHP 5.2+,请注意第一个检查。