尝试检索数组时尝试获取非对象属性的错误
我正在尝试使用json和wunderground API请求一些数据。尝试检索数组时尝试获取非对象属性的错误
当我使用此代码时,它返回错误“消息:尝试获取非对象的属性”。
<?php
$json_string = file_get_contents("http://api.wunderground.com/api/1e6a89f0a3aa092d/alerts/q/zmw:00000.1.16172.json");
$parsed_json = json_decode($json_string);
$wColor = $parsed_json->{'alerts'}->{'attribution'};
$wName = $parsed_json->{'alerts'}->{'wtype_meteoalarm'};
echo "Severe weather alert ${wColor} expected ${wName} - MORE INFO";
?>
数据是存在的,当我使用几乎相同的示例代码片段从文档
<?php
$json_string = file_get_contents("http://api.wunderground.com/api/1e6a89f0a3aa092d/geolookup/conditions/q/IA/Cedar_Rapids.json");
$parsed_json = json_decode($json_string);
$location = $parsed_json->{'location'}->{'city'};
$temp_f = $parsed_json->{'current_observation'}->{'temp_f'};
echo "Current temperature in ${location} is: ${temp_f}\n";
?>
它的工作原理可以在这里观看然而...
http://api.wunderground.com/api/1e6a89f0a3aa092d/alerts/q/zmw:00000.1.16172.json
绝对好!我第一次请求失败的原因是什么?
的问题是在你检索领域的方式。使用:
$wColor = $parsed_json->alerts[0]->attribution;
$wName = $parsed_json->alerts[0]->wtype_meteoalarm;
试试这个
$alert = current($parsed_json->{'alerts'});
$wColor = $alert->{'attribution'};
$wName = $alert->{'wtype_meteoalarm'};
$parsed_json->alerts
这里是数字数组包含对象:
它的var_dump()
“ED输出:
object(stdClass)#1 (2) {
["response"]=> ...
["alerts"]=>
array(1) {
[0]=>
object(stdClass)#4 (15) {
["type"]=>
string(3) "WRN"
...
}
}
}
因此,使用:
$wColor = $parsed_json->alerts[0]->attribution;
$wName = $parsed_json->alerts[0]->wtype_meteoalarm;
谢谢你。这得到了很好的解释。 – ServerSideSkittles 2013-04-27 19:25:54
@ServerSideSkittles你为什么接受别人的回答?我很困惑。 – bwoebi 2013-04-27 19:39:59
@bwoebi:关于回答问题和帮助别人,不是吗?看起来便宜,你抱怨OP选择了另一个答案 - 这恰好也是正确的,顺便说一句.. – 2013-04-27 21:01:14
'alerts'是一个数组,并且没有'attribution'属性 – 2013-04-27 18:57:12