json_decode在 Web 服务调用后返回 NULL

2022-08-30 09:02:52

有一个奇怪的行为与和我找不到解决方案:json_encodejson_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 服务的响应的内容类型:(也尝试使用"text/html; charset=utf-8""application/json; charset=utf-8")

可能的原因是什么?


答案 1

好吧,我有一个类似的问题,问题是服务器中的PHP魔术引号...这是我的解决方案:

if(get_magic_quotes_gpc()){
  $param = stripslashes($_POST['param']);
}else{
  $param = $_POST['param'];
}
$param = json_decode($param,true);

答案 2

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

从本质上讲,您从中获取数据的系统会以 UTF-8 编码,并在数据前面加上 BOM。您应该在将字符串放入字符串之前从字符串中删除前三个字节(a will do)。json_decode()substr($string, 3)

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

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


推荐