【问题标题】:json_decode not working after cURL call [duplicate]cURL调用后json_decode不起作用[重复]
【发布时间】:2014-05-08 14:48:13
【问题描述】:

我使用 curl 向服务器发送 GET 请求并取回 json 数据。当我在浏览器中打印这些数据时,我可以看到没有斜杠的正确 json 结构(魔术引号已关闭)——完全没有问题。

即使我将这个 json 数据从浏览器复制粘贴到变量中的另一个 php 文件,然后尝试对其进行解码,它也可以正常工作。数据在该文件中解码。

但是,当我尝试解码数据时从 cURL 请求中获取数据后,它失败了。它返回的只是:Array

这是我正在尝试的:

$resp = curl_exec($curl);
$d=json_decode($resp,true);

我不知道为什么会出现这种奇怪的行为? 我已经尝试了这个线程中提到的几乎所有东西json_decode returns NULL after webservice call

我还使用mb_detect_encoding 检测到 cURL 调用返回的字符串的编码,它是 UTF-8

这东西快把我逼疯了……

更新: 好的.....似乎 json_decode 实际上已解码数据并返回 $d 变量,但我无法访问数组中的元素。我使用 print_r 来查看数组的结构。有点像这样:

大批 ( [响应] => 数组 ( [开始] => 0 [文档] => 数组 ( [0] => 数组 ( [id] => S132250037010452 [slno] => 452 ) ) [找到的数量] => 1 ) )



当我尝试使用以下方式访问元素 ID 时:

echo $d[response][docs][0][id];

我收到一条通知,说明:使用未定义的常量响应 - 在该行假定为“响应”。这是什么意思??

【问题讨论】:

  • 你为curl_setopt 设置了什么?如果你var_dump($resp) 显示什么?
  • ok 一些进展.....我可以使用 print_r 看到数组的结构,这意味着 json 已解码,但仍然无法访问元素

标签: php curl get json


【解决方案1】:

编辑后,要访问此字段,您需要将 ' 括起来

echo $d['response']['docs'][0]['id']; // <--- Will return 'S132250037010452'

如果你不把名字括起来,PHP 会尝试使用常量

【讨论】:

  • 还是一样的结果。这次错误也有报价。使用未定义的常量响应 - 假定为“响应”
  • 不可能得到相同的结果....如果您使用'" PHP 不会尝试用作常量。你确定你写的和我写的一样吗? (或使用" 而不是'
  • 双引号终于为我工作了......谢谢你让我开心......:)
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 2018-10-27
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
相关资源
最近更新 更多