Search code examples
phparraysjsonwunderground

How to get a value from wunderground .json


I'm working on json source from wunderground.com. As the example code displayed in the document. I can adjust and work out for some simple format. But I'm stuck with this one. I tried to googled every where but there's no solution.

Here's the sample codes:

<?php
  $json_string = file_get_contents("http://api.wunderground.com/api/b8e924a8f008b81e/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";
?>

Well, I need some information like "Cedar Rapids" out of pws/station :

"pws": {
        "station": [
        {
        "neighborhood":"Ellis Park Time Check",
        "city":"Cedar Rapids",
        "state":"IA",
        "country":"US",
        "id":"KIACEDAR22",
        "lat":41.981174,
        "lon":-91.682632,
        "distance_km":2,
        "distance_mi":1
        }
]
}

(You can get all code by clicking this : http://api.wunderground.com/api/b8e924a8f008b81e/geolookup/conditions/q/IA/Cedar_Rapids.json ) Now the questions are:

  1. What is this data called? (array, array in array?)
  2. How could I pull this data out of the line?

Regards,


Solution

  • station is an array within the pws object.

    To get the data, you can do something like this:

    <?php
      $json_string = file_get_contents("http://api.wunderground.com/api/b8e924a8f008b81e/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";
    
      $stations = $parsed_json->{'location'}->{'nearby_weather_stations'}->{'pws'}->{'station'};
      $count = count($stations);
      for($i = 0; $i < $count; $i++)
      {
         $station = $stations[$i];
         if (strcmp($station->{'id'}, "KIACEDAR22") == 0)
         {
            echo "Neighborhood: " . $station->{'neighborhood'} . "\n";
            echo "City: " . $station->{'city'} . "\n";
            echo "State: " . $station->{'state'} . "\n";
            echo "Latitude: " . $station->{'lat'} . "\n";
            echo "Longitude: " . $station->{'lon'} . "\n";
            break;
         }
      }
    ?>
    

    Output:

    Current temperature in Cedar Rapids is: 38.5
    Neighborhood: Ellis Park Time Check
    City: Cedar Rapids
    State: IA
    Latitude: 41.981174
    Longitude: -91.682632