【问题标题】:Foreach returning errorsForeach 返回错误
【发布时间】:2011-11-20 06:24:38
【问题描述】:

我正在使用 yahoo api - 并且几乎与他们的示例不同。但我收到错误,例如:为 foreach() 提供的参数无效

这是实际的 foreach 语句:

foreach ($data->query->results->result as $r){
   // do something with the data

  }

我正在运行的整个代码都在这里:

$c =curl_init("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20local.search%20where%20state%3D'delaware'%20and%20city%20%3D%20'smyrna'%20and%20query%3D'pizza'&format=json"); 

curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 20); // query times out after 20 seconds

$data = curl_exec($c); // I asked for data format to be in json in the query it appears to be returned decoded
//print_r($data);
$data = curl_exec($c);
if ($data === FALSE) {
    die("Curl failed with error: " . curl_error($c));
}
$data = json_decode($data);
if (is_null($data)) {
    die("json_decode failed with error: " . json_last_error());
}
foreach ($data->query->results->result as $r){
   // do something with the data

  }

$data 是一个解码的 json 响应——它得到了数据,而且看起来我的结构是正确的——例如,我只想循环并显示公司名称——但不行。

【问题讨论】:

  • 你能提供一个 JSON 编码响应的例子吗?
  • var_dump $data,看看它包含什么。
  • 是的,连同示例(解码)响应,您能否也给我们一个您要从中提取数据的示例?

标签: php json api foreach


【解决方案1】:

应该是$data->query->results->Result。注意,大写的Result

帮助您处理 JSON。将整个 JSON 字符串粘贴到 this utility 中,直观地查看树状结构。

【讨论】:

  • 好的 - 必须是时候停下来过夜了 - 一个大写字母让我挂了一个多小时。谢谢!
【解决方案2】:

json_decode 如果您希望它返回一个 ARRAY 而不是一个对象,则需要您传递一个额外的布尔参数。

$data = json_decode($data,TRUE);
if (is_null($data)) {
    die("json_decode failed with error: " . json_last_error());
}
foreach ($data['query']['results]'['Result'] as $r){
   // do something with the data

  }

【讨论】:

  • +1 用于替代方法。但是,他的问题在于 Result 数组。如果你看一下返回的 JSON,它是 Result,而不是 result
猜你喜欢
  • 1970-01-01
  • 2012-05-22
  • 2020-09-12
  • 2016-03-02
  • 1970-01-01
  • 2019-08-24
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多