在这里,使用Gson从JSON字符串获取项目的值有点麻烦。
首先,我的代码的第一部分是从大量对象中获得一个对象:
String jsonOutput= weatherDataCollect(message);
Gson gson = new Gson();
JsonElement element = gson.fromJson(jsonOutput, JsonElement.class);
JsonObject jsonObject = element.getAsJsonObject();
System.out.println(jsonObject.toString());
JsonArray list = jsonObject.getAsJsonArray("list");
现在,如果我写:
JsonElement todaysWeather = list.get(0);
我完全满足了我的需要-json的这一部分
{"dt":1549281600,"main":{"temp":-0.38,"temp_min":-1.3,"temp_max":-0.38,"pressure":1024.85,"sea_level":1027.5,"grnd_level":1024.85,"humidity":94,"temp_kf":0.91},"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"clouds":{"all":92},"wind":{"speed":2.11,"deg":271.5},"snow":{"3h":0.5445},"sys":{"pod":"d"},"dt_txt":"2019-02-04 12:00:00"}
在JSON中,很多部分都是这样的。我需要从每个人那里获得像1549281600
这样的价值,并与我进行比较以找出哪个更接近。
代码的第一部分应该是这样
long tomorrowTime = getTomorrowUnixTime();
long timeDifference = Integer.MAX_VALUE;
int minDtIndex = 0;
for (int i = 0; i < list.size(); i++){
JsonElement weatherItem = list.get(i);
Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString());
}
但是这部分Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString())
不起作用。
它应该从每个dt
获取值并符合tomorrowTime
第二部分如下所示:
long diff = Math.abs(tomorrowTime - dt);
if(diff < timeDifference){
timeDifference = diff;
minDtIndex = i;
答案 0 :(得分:0)
Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString());
在这一行,您将得到以下编译错误:
getAsString( )
in JsonElement cannot be applied
这是因为getAsString()
不接受任何参数,这是您的语法错误。
在语义上,您首先需要将JSON Element
解释为JSON Object
,一旦它是JSON对象,您就可以提取名为 dt 的属性。
方法是:
Integer dt = new Integer(weatherItem.getAsJsonObject().get("dt").getAsInt());
我将参考此Question并在W3-Schools上阅读有关JSON格式本身的信息
您可以根据自己的逻辑和编码来管理其余的代码:)祝您编程愉快!