我正在使用wunderground在java web应用程序上获取天气信息。经过一番搜索,我发现Gson似乎是一个很好的json解析器。
但是在下面的一些例子中,我似乎不知道如何跳过根元素。下面是forecast 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);
}
}
现在我也应该专注于预测和简单的预测吗?
仅仅因为你“只对”JSON对象的一部分感兴趣,并不能让Gson神奇地提供这一点;)
您需要使POJO与JSON对象匹配,或者编写一个自定义反序列化程序,丢弃您不感兴趣的JSON对象部分,并返回数据
类的实例。
我正在尝试从XML文件中提取数据。将XML转换为JSON后,我无法访问数据。我正在用GSON解析数据。 这段代码给了我一个错误。 有什么建议吗?提前谢谢。 这是JSON内容: 这是以下类:
问题内容: 我在尝试将JSON解组到对象中时遇到GSON错误。错误( 应为BEGIN_OBJECT,但在第3行第22列处为STRING )指向下面输入的第3行。 我是否相对于Bean正确映射了JSON? 我输入的JSON看起来是这样的: 问题答案: 不,您没有正确映射它,因为您的json对象不是,它包含。 你可以创建一个类只是为了封装你,但它是清洁反序列化容器的使用 然后使用解析有趣的内容 并且我
问题内容: 我在列表中仅收到一个项目时收到此错误。我在服务器端REST Web服务中使用Jersey,当List返回一个元素并且当我得到它时,我仅收到错误,但是当它包含多个元素时,它可以正常工作,这就是我的工作方式它: 为什么Jersey不发送包含一个项目的列表?这是球衣的虫子吗?有没有办法使它始终序列化为数组? 当Web服务返回0元素时,这是我的JSON数据: 当Web服务返回1元素时,这是我的
我试图阅读一个简单的JSON响应: 这是我的代码: 但我有一个错误: java.lang.IllegalState异常:预期但被 我不明白我做错了什么。
问题内容: 我正在尝试解析这样的JSON字符串 进入对象列表。 这是我正在使用的对象类。 但这让我着迷 有什么想法我应该如何解决? 问题答案: 问题是你要告诉你具有你类型的对象。你不知道 你有一系列类型的对象。你不能只是尝试像这样投射结果并期望它神奇地工作;) 《用户指南》介绍了如何处理此问题: https://github.com/google/gson/blob/master/UserGuid
我将请求映射到类,如下所示: 有人能解释为什么我在请求中的数组没有与类A中的数组映射吗?