Lesen JSON von Url-java

Ich bin Probleme mit parson die JSON von einer URL. Unten ist der 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<Item> items;
    }

    static class Item {
        String title;
        String link;
        String description;
    }


}

Ausgabe:

null
null
null
null

Was ich denke, das problem ist, dass ich eine ungeeignete Klasse, um die Daten zu Lesen. Wäre das korrekt?

Dank

BEARBEITEN

Der website gibt das folgende Ergebnis zurück:

{
  "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"
  }
}

Aktualisierten 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;
    }


}
  • kann ich bitte einen Grund haben zu verbessern, die post?
  • Was bedeutet die website zurückkehren?
  • P. S. ich habe nicht downvote.
  • Das problem ist, dass Ihr POJO doen nicht ähneln den JSON, in irgendeiner Weise, form oder form.
  • Vielen Dank 🙂 ich habe aktualisiert, der code mit der Antwort. Benutzt habe ich eine online-JSON viewer zu erhalten die Antwort.
  • korrekt ist, müssen Sie zum erstellen eines POJO-entspricht der JSON.
  • könntest du bitte ein einfaches Beispiel? Ich habe Probleme mit der POJO-Konzept.
  • Siehe: stackoverflow.com/questions/14826237/... In der Tat, dies könnte wohl geschlossen werden, wie ein dup.
  • this und die this kann hilfreich sein.
  • Im wesentlichen, ich habe zu gehen durch die verschiedenen Aspekte des JSON und machen einen relevanten POJO, dass Deserialisieren können?
  • Das ist richtig. JSON stellt ein Objekt dar. Ihre Java-Objekt (POJO) übereinstimmen muss, das Objekt. Oder wie ich in der Antwort, die ich auf link zu, Sie können nur analysiert werden, und wählen Sie die Elemente, die Sie wollen und nicht ein POJO.
  • Das mit der einen Ausnahme, dass Sie nicht haben, zu erstellen, die das gesamte Objekt im Java-wenn Sie möchten, dass nur bestimmte Teile der JSON. Gson wird stillschweigend ignorieren, die Teil der JSON -, dass Sie nicht in Ihrem POJO (Und vice versa), als Sie entdeckt haben, - das ist, warum alle Ihre Felder sind derzeit null).
  • Super!!! Es wäre toll, wenn Sie möchten, fügen Sie diese als Antwort, so kann ich es akzeptieren.
  • Fertig 🙂 Vielen Dank.

InformationsquelleAutor Jeel Shah | 2013-02-19
Schreibe einen Kommentar