在这里,使用gson从json字符串获取项的值有点麻烦。
首先,我的代码的第一部分是从massive获得obejct:
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"}
在很多类似的地方。我需要从每个人那里得到这样的价值 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;
1条答案
按热度按时间syqv5f0l1#
在这一行中,您将得到以下编译错误:
这是因为
getAsString()
不接受任何参数,这是您的语法错误。从语义上讲,你首先要解释
JSON Element
作为JSON Object
,一旦它是一个json对象,就可以提取名为dt的属性。方法是:
我将引用这个问题并阅读关于w3学校的json格式本身的内容
其余的你可以管理自己的逻辑和编码:)快乐的编码!