如何从JSON weather api中提取特定数据

时间:2014-10-18 18:20:12

标签: php json

我在wunderground上找到了一些(大多数)以下代码,但它确实有效。我无法弄清楚如何直接提取具体信息。这是将按原样运行的代码:

<?php 


function iterate($name, $object)
{
   foreach ($object as $key => $value)
   {
      if (is_object($value))
      {
         iterate("${name}->${key}", $value);
      }
      else if (is_array($value))
      {
         $n = count($value);
         for ($i = 0; $i < $n; ++$i)
         {
            if (is_object($value[$i]))
            {
               iterate("${name}->${key}[$i]", $value[$i]);
            }
            else
            {
              print "${name}->${key}[$i] = '$value'\n";
              echo "<br>";
            }
         }
      }
      else
      {
          print "${name}->${key} = '$value'\n";
          echo "<br>";
          print "${name}->${key} = '$value'\n";
          print "$name->$key\n";
          print_r ($value);
          echo "<br> <br>";
      }
    }

}

$api = 'http://api.wunderground.com/api';
$key = 'a66c7dca62f80c59'; // 
$features = 'geolookup/forecast10day'; // your desired features here
$query = 'q/MA/KBOS'; // your query here
$data = json_decode(file_get_contents("$api/$key/$features/q/$query.json"));


iterate('data', $data);

现在这里是我添加但不起作用的代码:

   $test = $data->{'forecast'}->{'txt_forecast'}->{'forecastday[4]'}->{'fcttext'};
   print "$test";

&GT;

我已将json查询解码为$ data但我如何获取特定信息呢?

2 个答案:

答案 0 :(得分:0)

你试过吗

$data[0]->{'forecast'}

此外,如果您更喜欢关联数组,只需将true添加为json_decode的第二个参数,您就可以像这样访问数据:

$data[0]['forecast']

PS。向我们展示JSON的一部分将使我们更容易帮助您解决问题。

答案 1 :(得分:0)

$api = 'http://api.wunderground.com/api';
$key = 'a66c7dca62f80c59'; //
$features = 'geolookup/forecast10day'; // your desired features here
$query = 'q/MA/KBOS'; // your query here
$data = json_decode(file_get_contents("$api/$key/$features/q/$query.json"),1);

echo $data['forecast']['txt_forecast']['forecastday'][4]['fcttext'];

当然,在现实世界中你会想要在引用它之前检查所有这些东西是否存在

$forecastdays = $data['forecast']['txt_forecast']['forecastday'];

foreach ($forecastdays as $forecastday){
    echo $forecastday['fcttext'] . '<br>';
}