webservice调用后,json_decode返回NULL

66

使用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。 来自webservice的响应Content-Type是"text/html; charset=utf-8"(也尝试使用"application/json; charset=utf-8")。 可能的原因是什么?
24个回答

1

我在MySQL中存储json字符串时遇到了问题。

不太清楚为什么,但在json_decode之前使用htmlspecialchars_decode解决了问题。


1
也许你使用了像$${这样的字符:这些字符应该被引用。

1

这些解决方案都没有对我起作用。 最终起作用的是通过将字符串编码保存到本地文件并使用Notepad++打开来检查它。 我发现它是“UTF-16”,所以我能够通过以下方式进行转换:

$str = mb_convert_encoding($str,'UTF-8','UTF-16');

0

你应该尝试使用json_last_error_msg()。它会给出错误信息并告诉你出了什么问题。它是在PHP 5.5中引入的。

$foo = "{"action":"set","user":"123123123123","status":"OK"}";
$data = json_decode($foo, true);
if($data == null) {
    throw new Exception('Decoding JSON failed with the following message: '
                             . json_last_error_msg());
}

// ... JSON decode was good => Let's use the data

0

在使用json_decode之前,尝试对字符串使用json_encode...我不知道它是否适用于您,但对我有效...我正在使用laravel 4通过路由参数进行ajax。

$username = "{username: john}";
public function getAjaxSearchName($username)
{
    $username = json_encode($username);
    die(var_dump(json_decode($username, true)));
}

0
在Notepad ++中,选择“编码”(顶部菜单),然后确保选择了“以UTF-8编码”。
这将显示任何不应出现在您的JSON中的字符,这些字符会导致json_decode失败。

0
检查文件的编码。我正在使用Netbeans,不得不使用iso windows 1252编码来处理一个旧项目,自那时以来,Netbeans一直在为每个新文件使用这种编码。然后json_decode 将返回NULL。以UTF-8编码重新保存文件对我解决了问题。

0

Laravel专用答案: 我在Laravel中遇到了同样的问题。这个方法对我很有帮助。

$result = json_decode($result->getContent(), true);

我认为这并不是一个合理的解决方案。最好的情况是,它是针对另一个问题的正确答案。像这样的帖子会让 Stack Overflow 页面显得不必要地长和臃肿。 - mickmackusa
1
@mickmackusa 我添加这个并不是为了获得积分,而是为了帮助其他PHP开发者。由于Laravel是一个著名的PHP框架,我相信像我一样的许多人最终会着陆到这个页面,面对与我相同的问题。我不同意你说这是非法的。我特别加粗说明这是Laravel特定的答案。这只是为了最终帮助。如果这能让你满意,我可以删除它。干杯。 - Inderpreet Singh
你可以做任何你想做的事情。我已经投票删除这个答案,原因是早先评论过了。 - mickmackusa

0
在我的情况下,当我将json打印到屏幕上时,它很好,并且我使用json_decode()函数进行了复制和解码。它一直很好用。但是,当我尝试直接将json字符串放入函数中时,它返回null,因为引号像这样出现:"。所以我使用了htmlspecialchars_decode()函数,现在它可以正常工作了。 我是新来的,如果我在写答案时犯了任何错误,请原谅。我希望它能帮助某些人。

0
在应用 PHP 相关的解决方案之前,请验证您的 JSON 格式。这可能是问题所在。尝试使用以下在线 JSON 格式验证器。如果您的 JSON 格式无效,请先进行更正,因为 PHP 无法解码无效的 JSON 字符串。

https://jsonformatter.org/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接