Jakarta ee Gson应为BEGIN_对象,但为字符串

Jakarta ee Gson应为BEGIN_对象,但为字符串,jakarta-ee,gson,Jakarta Ee,Gson,我正在使用wunderground在java web应用程序上获取天气信息。 经过一番搜索,我发现Gson似乎是一个不错的json解析器 但是在下面的一些例子中,我似乎不知道如何跳过根元素。 下面是一个预测json请求的示例: { "forecast" : { "simpleforecast" : { "forecastday" : [ { "avehumidity" : 61, "a

我正在使用wunderground在java web应用程序上获取天气信息。 经过一番搜索,我发现Gson似乎是一个不错的json解析器

但是在下面的一些例子中,我似乎不知道如何跳过根元素。 下面是一个预测json请求的示例:

{
    "forecast" : {
        "simpleforecast" : {
            "forecastday" : [ {
                "avehumidity" : 61,
                "avewind" : {
                    "degrees" : 342,
                    "dir" : "NNW",
                    "kph" : 11,
                    "mph" : 7
                },
                "conditions" : "Clear",
                "date" : {
                    "ampm" : "PM",
                    "day" : 17,
                    "epoch" : "1358478000",
                    "hour" : 21,
                    "isdst" : "0",
                    "min" : "00",
                    "month" : 1,
                    "monthname" : "January",
                    "pretty" : "9:00 PM CST on January 17, 2013",
                    "sec" : 0,
                    "tz_long" : "America/Chicago",
                    "tz_short" : "CST",
                    "weekday" : "Thursday",
                    "weekday_short" : "Thu",
                    "yday" : 16,
                    "year" : 2013
                },
                "high" : {
                    "celsius" : "11",
                    "fahrenheit" : "52"
                },
                "icon" : "clear",
                "icon_url" : "http://icons-ak.wxug.com/i/c/k/clear.gif",
                "low" : {
                    "celsius" : "-2",
                    "fahrenheit" : "28"
                },
                "maxhumidity" : 76,
                "maxwind" : {
                    "degrees" : 340,
                    "dir" : "NNW",
                    "kph" : 18,
                    "mph" : 11
                },
                "minhumidity" : 38,
                "period" : 1,
                "pop" : 10,
                "qpf_allday" : {
                    "in" : 0.0,
                    "mm" : 0.0
                },
                "qpf_day" : {
                    "in" : 0.0,
                    "mm" : 0.0
                },
                "qpf_night" : {
                    "in" : 0.0,
                    "mm" : 0.0
                },
                "skyicon" : "mostlysunny",
                "snow_allday" : {
                    "cm" : 0,
                    "in" : 0
                },
                "snow_day" : {
                    "cm" : 0,
                    "in" : 0
                },
                "snow_night" : {
                    "cm" : 0,
                    "in" : 0
                }
            },
            {
                "avehumidity" : 59,
                "avewind" : {
                    "degrees" : 172,
                    "dir" : "South",
                    "kph" : 6,
                    "mph" : 4
                },
                "conditions" : "Clear",
                "date" : {
                    "ampm" : "PM",
                    "day" : 18,
                    "epoch" : "1358564400",
                    "hour" : 21,
                    "isdst" : "0",
                    "min" : "00",
                    "month" : 1,
                    "monthname" : "January",
                    "pretty" : "9:00 PM CST on January 18, 2013",
                    "sec" : 0,
                    "tz_long" : "America/Chicago",
                    "tz_short" : "CST",
                    "weekday" : "Friday",
                    "weekday_short" : "Fri",
                    "yday" : 17,
                    "year" : 2013
                },
                "high" : {
                    "celsius" : "10",
                    "fahrenheit" : "50"
                },
                "icon" : "clear",
                "icon_url" : "http://icons-ak.wxug.com/i/c/k/clear.gif",
                "low" : {
                    "celsius" : "-1",
                    "fahrenheit" : "30"
                },
                "maxhumidity" : 84,
                "maxwind" : {
                    "degrees" : 170,
                    "dir" : "South",
                    "kph" : 10,
                    "mph" : 6
                },
                "minhumidity" : 40,
                "period" : 2,
                "pop" : 0,
                "qpf_allday" : {
                    "in" : 0.0,
                    "mm" : 0.0
                }, ..................
现在我只感兴趣的部分是预报日。因此,我所做的是:

package entity.json;

import java.util.List;

public class Data {
    private List<Forecast> forecastday;

    public List<Forecast> getForecastdays() {
        return forecastday;
    }
}
这是我的方法:

package entity.json;

public class Forecast {
    private int avehumidity;
    private Avewind avewind;
    private String conditions;
    private DateWeather date;
    private CelciusHigh high;
    private String icon_url;
    private CelciusLow low;
    // + constructor, getters, setters
public void createWeatherForecast(){
        String text = "";
        try {
            URL url = new URL(jsonUrl);
            System.out.println(jsonUrl);
            Scanner s = new Scanner(url.openStream());
            while(s.hasNextLine()){
                text += s.nextLine();
            }
            Data weather = new Gson().fromJson(text, Data.class);
            System.out.println(new Gson().toJson(weather));
            System.out.println(weather.getForecastdays().get(0).getAvewind());
        } catch (IOException ex) {
            Logger.getLogger(WeatherController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
现在我还应该关注forecast和simpleforecast吗?

仅仅因为您“只对”JSON对象的一部分感兴趣并不能让Gson神奇地提供它;)


您需要使POJO与JSON对象匹配,或者编写一个自定义反序列化程序,丢弃您不感兴趣的JSON对象部分,并返回
数据
类的实例

很抱歉反应太晚,我完全忘了这个问题。正如你所建议的,我编写了自己的反序列化程序。在一位程序员同事的帮助下:D