一尘不染

网络服务调用后 json_decode 返回NULL

json

和存在一种奇怪的行为,json_encode而json_decode我找不到解决方案:

我的php应用程序调用了php Web服务。Web服务返回的json如下所示:

var_dump($foo):
string(62) "{"action":"set","user":"123123123123","status":"OK"}"

现在我想在应用程序中解码json:

$data = json_decode($foo, true)

但它返回NULL:

var_dump($data):
NULL

我使用php5。来自Web服务的响应的Content-Type :("text/html; charset=utf-8"也尝试使用"application/json; charset=utf-8")

可能是什么原因?


阅读 315

收藏
2020-07-27

共1个答案

一尘不染

编辑: 只是做了一些快速检查由OP提供的字符串。大括号前面的小“字符”是UTF-8 B(yte)O(rder)M(ark) 0xEF 0xBB 0xBF。我不知道为什么此字节序列显示为此处。

本质上,您从中获取数据的系统将其发送为以UTF-8编码的数据,并在数据之前添加BOM。您应该先从字符串中删除前三个字节,然后再将其放入json_decode()(a substr($string, 3)会这样做)。

string(62) "{"action":"set","user":"123123123123","status":"OK"}"
            ^
            |
            This is the UTF-8 BOM

正如黑木风(Kuroki Kaze)所发现的那样,这个角色肯定是json_decode失败的原因。给定格式的字符串不是JSON格式的正确结构(请参阅RFC 4627)

2020-07-27