【问题标题】:json_decode returns NULL despite apparently correct JSON response尽管 JSON 响应显然正确,但 json_decode 返回 NULL
【发布时间】:2015-02-20 16:59:44
【问题描述】:

我正在尝试使用 json_decode 解释来自 Web 服务调用的响应。 JSON 似乎是有效的(已签入在线验证器等),但 json_decode 仍然返回 NULL。

web服务返回的数据如下:

[{"id":"cc9dfabc36abc54c5a7","extension":"001","links":{"self":"https:\/\/someurl\/api\/response\/@me\/001\/cc9dfabc36abc54c5a7"}}]

Web 服务响应数据存储在$result 中。我解码 JSON 的代码如下:

if (is_null(json_decode($result))){
        $callObj = json_decode($result, true);  
        $callID = $callObj->extension;  
    }
    else
    {
        echo "<BR>Could not decode response <BR>";
        $callID = 'error';
    }           
    return $callID; 

【问题讨论】:

  • 看看这个。好像和你的问题一样stackoverflow.com/questions/2410342/…
  • 嗨,是的,我看到了,但认为问题一定不同,我的输出直接来自 Web 服务。如何测试非法字符?

标签: php json


【解决方案1】:

第一次测试不应该是阴性(!is_null)吗?只有当它不为空(因此是一个 json 对象)时,您才应该继续。

此外,您传递的第二个 json_encode 函数将“true”作为第二个参数,它使返回的对象成为关联数组而不是对象。

以下更改似乎对我有用。

if (!is_null(json_decode($result))){
    $callObj = json_decode($result, true);
    $callID = $callObj[0]['extension'];
}
else
{
    echo "<BR>Could not decode response <BR>";
    $callID = 'error';
}
return $callID;

【讨论】:

  • 啊!耻辱。是的,你在这两个方面都是对的。 'true' 论点是我测试的一部分,但 !is_null 完全是疏忽,看不到树木只见树木。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2021-10-25
  • 2014-12-18
  • 2017-08-10
  • 1970-01-01
相关资源
最近更新 更多