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

标签 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;

最佳答案

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

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

getAsString( ) 
in JsonElement cannot be applied

这是因为 getAsString() 不接受任何参数,这是您的语法错误。

从语义上讲,您首先必须将 JSON 元素 解释为 JSON 对象,一旦它是 JSON 对象,您就可以提取名为 dt 的属性。

这样做的方法是:

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

我会引用这个Question并在 W3-Schools 上阅读有关 JSON 格式本身的信息

其余的您可以根据自己的逻辑和编码进行管理:)快乐编码!

关于java - 使用Gson从json文件中获取Item的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515546/

相关文章:

java - 使用ajax post将json从js发送到 Controller

java - Guava Lists.transform 或 Iterables.transform 可以使用转换器吗?

java - Json 对象到 java arraylist

java - 如果类声明无法更改,如何在序列化时或多或少地全局更改生成的 Json?

java - 如何将SQL结果写入JSON

java - 将 json 部分反序列化为 POJO,但保留一些原始 json 作为字段

java - 从 AndEngine 切换到 libgdx - 需要了解什么?

java - 二维 map Java

java - 在 DataWeave 1.0 中将字符串转换为数字时如何避免指数

java - 无法正确迭代 jasonArray 并且出现错误