所以我正在玩yahoo的yql。我得到它生成一个网址,网址看起来像是将解码的json返回给我。如果我尝试解码yql url的输出,我得不到任何结果(假设我正好在那里)
$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
curl_close($c);
//print_r($data);
//$arr[] = $data; (returning results in decoded json)
//print_r($arr); (returning results)
foreach($data->query->results->result as $result)
{
echo 'blah blah blah';
}
然而,无论我如何做事,我似乎无法访问我的foreach行中的输出。我做错了什么?
提前致谢
答案 0 :(得分:2)
您必须首先解码json字符串,否则它仍然是纯文本字符串:
$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(...) {
}
注意我添加了错误处理 - 你的代码没有,并假设curl调用成功。这是一个糟糕的方式,因为您不能依赖外部资源来呈现或运行。在继续之前,请务必检查外部资源请求是否成功。