JSON在php中使用上非常方便, 但一些细节需要特别注意. 返回值并不能决定解析成功.
具体可以看一下示例, 分别对各种情况进行了测试.
基本上测试结果如下:
1: 布尔值, 数字作为参数时, 将永远解析成功 ( ?是否合适 )
2: 解析失败的情况下json_last_error() 返回非0
3: json_last_error_msg() 任何情况下都不会返回空.
那这时需要怎么来判断解析成功呢? 我的建议如下.
1: 判断 json_decode 返回值为数组类型, 即使是空数组,
2: 判断 json_last_error 等于 JSON_ERROR_NONE 也就是0
代码如下:
<?php
$ret = json_decode('11abc', true);
if(is_array($ret) && json_last_error() === JSON_ERROR_NONE){
// this ok
}
复制
一些示例如下:
<?php
var_dump(json_decode('0', true));
var_dump(json_last_error(), json_last_error_msg());
复制
返回值如下:
成功的解析?
<?php
var_dump(json_decode('', true));
var_dump(json_last_error(), json_last_error_msg());
复制
返回值如下图
失败的解析
<?php
var_dump(json_decode(true, true));
var_dump(json_last_error(), json_last_error_msg());
复制
返回值如下图
成功的解析
<?php
var_dump(json_decode(1, true));
var_dump(json_last_error(), json_last_error_msg());
复制
返回值如下图
成功的解析