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