title: Reading value of nested key in JSON with Java (Jackson)
body: <p>I'm a new Java programmer coming from a background in Python. I have weather data that's being collected/returned as a JSON with nested keys in it, and I don't understand how pull the values out in this situation. I'm sure this question has been asked before, but I swear I've Googled a great deal and I can't seem to find an answer. Right now I'm using json-simple, but I tried switching to Jackson and still couldn't figure out how to do this. Since Jackson/Gson seem to be the most used libraries, I'd would love to see an example using one of those libraries. Below is a sample of the data, followed by the code I've written so far. </p>
  
  <pre><code>{
      "response": {
          "features": {
              "history": 1
          }
       },
      "history": {
          "date": {
              "pretty": "April 13, 2010",
              "year": "2010",
              "mon": "04",
              "mday": "13",
              "hour": "12",
              "min": "00",
              "tzname": "America/Los_Angeles"
          },
          ...
      }
  }
  </code></pre>
  
  <p>Main function</p>
  
  <pre><code>public class Tester {
  
      public static void main(String args[]) throws MalformedURLException, IOException, ParseException {
          WundergroundAPI wu =  new WundergroundAPI("*******60fedd095");
  
          JSONObject json = wu.historical("San_Francisco", "CA", "20100413");
  
          System.out.println(json.toString());
          System.out.println();
          //This only returns 1 level. Further .get() calls throw an exception
          System.out.println(json.get("history"));
      }
  }
  </code></pre>
  
  <p>The function 'historical' calls another function that returns a JSONObject</p>
  
  <pre><code>public static JSONObject readJsonFromUrl(URL url) throws MalformedURLException, IOException, ParseException {
  
      InputStream inputStream = url.openStream();
  
      try {
          JSONParser parser = new JSONParser();
          BufferedReader buffReader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
  
          String jsonText = readAll(buffReader);
          JSONObject json = (JSONObject) parser.parse(jsonText);
          return json;
      } finally {
          inputStream.close();
      }
  }
  </code></pre>