使用Gson从json文件获取Item的值

时间:2019-02-04 11:54:49

标签: java gson

在这里,使用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;

1 个答案:

答案 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格式本身的信息

您可以根据自己的逻辑和编码来管理其余的代码:)祝您编程愉快!