Search code examples
javajsonapigsonwunderground

Java JSON with GSON


Here's the problem, I'm using a weather APi from Wunderground and am having trouble using GSON to fetch the weather.

import java.net.*;
import java.io.*;
import com.google.gson.*;

public class URLReader {

    public static URL link;

    public static void main(String[] args) {
        try{
            open();
            read();
        }catch(IOException e){}
    }

    public static void open(){
        try{
            link = new URL("http://api.wunderground.com/api/54f05b23fd8fd4b0/geolookup/conditions/forecast/q/US/CO/Denver.json");
        }catch(MalformedURLException e){}
    }

    public static void read() throws IOException{
        Gson gson = new Gson();

        // Code to get variables like humidity, chance of rain, ect...
    }
} 

That is as far as I got, so can someone please help me to get this thing working. I need to be able to parse specific variables not just the entire JSON file.

I used a buffered reader but it read the entire JSON file.

Thanks in advance, I'm a beginner so go easy and explain things very straightforward :)


Solution

  • You can parse the entire stream, and then pull out what you need. Here's an example of parsing it:

        String url=getUrl();
        JSONObject jsonObject = new JSONObject();
        StringBuilder stringBuilder=new StringBuilder();
        try 
        {
            HttpGet httpGet = new HttpGet(url);
            HttpClient client = new DefaultHttpClient();
            HttpResponse response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
    
            jsonObject = new JSONObject(stringBuilder.toString());
    
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
        } catch (IOException e) {    }
    

    Reading it, you have to navigate your way through the table, something like this:

    jsonObject.getJSONObject("Results");
    

    Here's an example from one of my programs using this library:

    int statusCode=jobj.getJSONObject("info").getInt("statuscode");
    

    I make heavy use out of the following to get it right:

    jsonObject.names();
    

    That will give you the name of all of the keys. From there, you have to figure out if it's an array, an object, or a primitive type. It takes me a bit to get it right, but once you've done it once, it's done forever, hopefully. Take a look at the Android documents on their JSON library.