PHP json_decode()报错 json_last_error()判断错误类型 解决

355 阅读1分钟

注意: 低版本php json错误码不全

json_last_error()错误msg对照表:

0 = JSON_ERROR_NONE //没有错误发生

1 = JSON_ERROR_DEPTH //到达了最大堆栈深度

2 = JSON_ERROR_STATE_MISMATCH //无效或异常的json

3 = JSON_ERROR_CTRL_CHAR //控制字符错误,可能是编码不对

4 = JSON_ERROR_SYNTAX //语法错误

5 = JSON_ERROR_UTF8 //异常的utf-8字符,也许是因为不正确的编码

json_last_error()函数测详细介绍请参见:php.golaravel.com/function.js…

我遇到的问题是使用json_decode()时,数据为空 打印json_last_error()结果显示为0

查阅了一些关于json_decode()的使用相关规范,如下: json_decode要求的字符串比较严格

  1. 使用UTF-8编码
  2. 不能在最后元素有逗号
  3. 不能使用单引号
  4. 不能有\r,\t,如果有请替换

最后发现是数据返回格式的问题

$json = str_replace('["', '{"', $post_result);
$jsonData = str_replace(']]', ']}', $json);