2013-04-27 138 views
1

我正在尝试使用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

绝对好!我第一次请求失败的原因是什么?

+0

'alerts'是一个数组,并且没有'attribution'属性 – 2013-04-27 18:57:12

回答

1

的问题是在你检索领域的方式。使用:

$wColor = $parsed_json->alerts[0]->attribution; 
    $wName = $parsed_json->alerts[0]->wtype_meteoalarm; 
0

试试这个

$alert = current($parsed_json->{'alerts'}); 
$wColor = $alert->{'attribution'}; 
$wName = $alert->{'wtype_meteoalarm'}; 
+0

什么是'current'? – 2013-04-27 18:59:40

+0

http://php.net/manual/en/function.current.php只是PHP函数 – Ziumin 2013-04-27 19:01:04

+0

@JanDvorak'current'在这里给出数组的第一个条目(因为数组指针是第一个0,如果它不打算被改变) – bwoebi 2013-04-27 19:01:27

2

$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; 
+0

谢谢你。这得到了很好的解释。 – ServerSideSkittles 2013-04-27 19:25:54

+0

@ServerSideSkittles你为什么接受别人的回答?我很困惑。 – bwoebi 2013-04-27 19:39:59

+1

@bwoebi:关于回答问题和帮助别人,不是吗?看起来便宜,你抱怨OP选择了另一个答案 - 这恰好也是正确的,顺便说一句.. – 2013-04-27 21:01:14

相关问题