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";

?>

数据在那里,可以在这里查看...

http://api.wunderground.com/api/1e6a89f0a3aa092d/alerts/q/zmw:00000.1.16172.json

然而,当我使用文档中几乎相同的示例代码片段时

<?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";
?> 

它工作得很好!为什么我的第一个请求失败了?

4

3 回答 3

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;
于 2013-04-27T19:00:07.197 回答
1

问题在于您检索字段的方式。利用:

  $wColor = $parsed_json->alerts[0]->attribution;
  $wName = $parsed_json->alerts[0]->wtype_meteoalarm;
于 2013-04-27T18:59:55.770 回答
0

尝试这个

$alert = current($parsed_json->{'alerts'});
$wColor = $alert->{'attribution'};
$wName = $alert->{'wtype_meteoalarm'};
于 2013-04-27T18:59:09.307 回答