title: Reading JSON from Url java
body: <p>I am having trouble with parson the JSON from a URL. Below, is the code. </p>
  
  <pre><code>import java.io.BufferedReader;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.net.URL;
  import java.util.List;
  import com.google.gson.Gson;
  
  
  public class Test_Application {
  
      /**
       * @param args
       * @throws Exception 
       */
      public static void main(String[] args) throws Exception {
          // TODO Auto-generated method stub
          Gson gson = new Gson();
  
          String json = readUrl("http://api.wunderground.com/api/57dd9039b81a9c21/conditions/q/CA/San_Francisco.json");
  
          Page page = gson.fromJson(json, Page.class);
  
          System.out.println(page.description);
          System.out.println(page.language);
          System.out.println(page.link);
          System.out.println(page.title);
  
      }
  
      private static String readUrl(String urlString) throws Exception {
          BufferedReader reader = null;
          try {
              URL url = new URL(urlString);
              reader = new BufferedReader(new InputStreamReader(url.openStream()));
              StringBuffer buffer = new StringBuffer();
              int read;
              char[] chars = new char[1024];
              while ((read = reader.read(chars)) != -1)
                  buffer.append(chars, 0, read); 
  
              return buffer.toString();
          } finally {
              if (reader != null)
                  reader.close();
          }
  
      }
  
      static class Page {
          String title;
          String link;
          String description;
          String language;
          List&lt;Item&gt; items;
      }
  
      static class Item {
          String title;
          String link;
          String description;
      }
  
  
  }
  </code></pre>
  
  <p>The output is: </p>
  
  <pre><code>null
  null
  null
  null
  </code></pre>
  
  <p>What I think the problem is that, I have an inappropriate class to read the data. Would that be correct?</p>
  
  <p>Thanks</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>The website returns the following: </p>
  
  <pre><code>{
    "response": {
      "version": "0.1",
      "termsofService": "http://www.wunderground.com/weather/api/d/terms.html",
      "features": {
        "conditions": 1
      }
    },
    "current_observation": {
      "image": {
        "url": "http://icons-ak.wxug.com/graphics/wu2/logo_130x80.png",
        "title": "Weather Underground",
        "link": "http://www.wunderground.com"
      },
      "display_location": {
        "full": "San Francisco, CA",
        "city": "San Francisco",
        "state": "CA",
        "state_name": "California",
        "country": "US",
        "country_iso3166": "US",
        "zip": "94101",
        "latitude": "37.77500916",
        "longitude": "-122.41825867",
        "elevation": "47.00000000"
      },
      "observation_location": {
        "full": "SOMA - Near Van Ness, San Francisco, California",
        "city": "SOMA - Near Van Ness, San Francisco",
        "state": "California",
        "country": "US",
        "country_iso3166": "US",
        "latitude": "37.773285",
        "longitude": "-122.417725",
        "elevation": "49 ft"
      },
      "estimated": {
  
      },
      "station_id": "KCASANFR58",
      "observation_time": "Last Updated on February 19, 7:08 AM PST",
      "observation_time_rfc822": "Tue, 19 Feb 2013 07:08:18 -0800",
      "observation_epoch": "1361286498",
      "local_time_rfc822": "Tue, 19 Feb 2013 07:08:31 -0800",
      "local_epoch": "1361286511",
      "local_tz_short": "PST",
      "local_tz_long": "America/Los_Angeles",
      "local_tz_offset": "-0800",
      "weather": "Mostly Cloudy",
      "temperature_string": "47.9 F (8.8 C)",
      "temp_f": 47.9,
      "temp_c": 8.8,
      "relative_humidity": "87%",
      "wind_string": "From the SW at 4.0 MPH Gusting to 13.0 MPH",
      "wind_dir": "SW",
      "wind_degrees": 225,
      "wind_mph": 4.0,
      "wind_gust_mph": "13.0",
      "wind_kph": 6.4,
      "wind_gust_kph": "20.9",
      "pressure_mb": "1012",
      "pressure_in": "29.90",
      "pressure_trend": "-",
      "dewpoint_string": "44 F (7 C)",
      "dewpoint_f": 44,
      "dewpoint_c": 7,
      "heat_index_string": "NA",
      "heat_index_f": "NA",
      "heat_index_c": "NA",
      "windchill_string": "46 F (8 C)",
      "windchill_f": "46",
      "windchill_c": "8",
      "feelslike_string": "46 F (8 C)",
      "feelslike_f": "46",
      "feelslike_c": "8",
      "visibility_mi": "10.0",
      "visibility_km": "16.1",
      "solarradiation": "",
      "UV": "0",
      "precip_1hr_string": "0.00 in ( 0 mm)",
      "precip_1hr_in": "0.00",
      "precip_1hr_metric": " 0",
      "precip_today_string": "0.02 in (1 mm)",
      "precip_today_in": "0.02",
      "precip_today_metric": "1",
      "icon": "mostlycloudy",
      "icon_url": "http://icons-ak.wxug.com/i/c/k/mostlycloudy.gif",
      "forecast_url": "http://www.wunderground.com/US/CA/San_Francisco.html",
      "history_url": "http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=KCASANFR58",
      "ob_url": "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=37.773285,-122.417725"
    }
  }
  </code></pre>
  
  <p><strong>Updated code</strong></p>
  
  <pre><code>import java.io.BufferedReader;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.net.URL;
  import java.util.List;
  import com.google.gson.Gson;
  
  
  public class Test_Application {
  
      /**
       * @param args
       * @throws Exception 
       */
      public static void main(String[] args) throws Exception {
          // TODO Auto-generated method stub
          Gson gson = new Gson();
  
          String json = readUrl("http://api.wunderground.com/api/57dd9039b81a9c21/conditions/q/CA/San_Francisco.json");
  
          // Page page = gson.fromJson(json, Page.class);
          Response response = gson.fromJson(json, Response.class);
  
          System.out.println(response.termsOfService);
          System.out.println(response.version);
  
      }
  
      private static String readUrl(String urlString) throws Exception {
          BufferedReader reader = null;
          try {
              URL url = new URL(urlString);
              reader = new BufferedReader(new InputStreamReader(url.openStream()));
              StringBuffer buffer = new StringBuffer();
              int read;
              char[] chars = new char[1024];
              while ((read = reader.read(chars)) != -1)
                  buffer.append(chars, 0, read); 
  
              return buffer.toString();
          } finally {
              if (reader != null)
                  reader.close();
          }
  
      }
  
      static class Response{
          String version;
          String termsOfService;
      }
  
  
  }
  </code></pre>