和存在一种奇怪的行为,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")
Content-Type :("text/html; charset=utf-8"
"application/json; charset=utf-8")
可能是什么原因?
编辑: 只是做了一些快速检查由OP提供的字符串。大括号前面的小“字符”是UTF-8 B(yte)O(rder)M(ark) 0xEF 0xBB 0xBF。我不知道为什么此字节序列显示为此处。
UTF-8 B(yte)O(rder)M(ark) 0xEF 0xBB 0xBF
本质上,您从中获取数据的系统将其发送为以UTF-8编码的数据,并在数据之前添加BOM。您应该先从字符串中删除前三个字节,然后再将其放入json_decode()(a substr($string, 3)会这样做)。
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)