使用gson从json文件获取项的值

j1dl9f46  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(292)

在这里,使用gson从json字符串获取项的值有点麻烦。
首先,我的代码的第一部分是从massive获得obejct:

  1. String jsonOutput= weatherDataCollect(message);
  2. Gson gson = new Gson();
  3. JsonElement element = gson.fromJson(jsonOutput, JsonElement.class);
  4. JsonObject jsonObject = element.getAsJsonObject();
  5. System.out.println(jsonObject.toString());
  6. JsonArray list = jsonObject.getAsJsonArray("list");

所以现在如果我写:

  1. JsonElement todaysWeather = list.get(0);

我得到了我所需要的东西——json的这一部分

  1. {"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 和我的比较,找出哪一个更接近。
代码的第一部分应该是这样的

  1. long tomorrowTime = getTomorrowUnixTime();
  2. long timeDifference = Integer.MAX_VALUE;
  3. int minDtIndex = 0;
  4. for (int i = 0; i < list.size(); i++){
  5. JsonElement weatherItem = list.get(i);
  6. Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString());
  7. }

但这部分 Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString()) 不起作用。它应该从每个 dt 与…兼容 tomorrowTime 第二部分如下:

  1. long diff = Math.abs(tomorrowTime - dt);
  2. if(diff < timeDifference){
  3. timeDifference = diff;
  4. minDtIndex = i;
syqv5f0l

syqv5f0l1#

  1. Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString());

在这一行中,您将得到以下编译错误:

  1. getAsString( ) 
  2. in JsonElement cannot be applied

这是因为 getAsString() 不接受任何参数,这是您的语法错误。
从语义上讲,你首先要解释 JSON Element 作为 JSON Object ,一旦它是一个json对象,就可以提取名为dt的属性。
方法是:

  1. Integer dt = new Integer(weatherItem.getAsJsonObject().get("dt").getAsInt());

我将引用这个问题并阅读关于w3学校的json格式本身的内容
其余的你可以管理自己的逻辑和编码:)快乐的编码!

相关问题