无法弄清楚如何获取JSON响应字符串。要从OpenWeatherMap API(https://samples.openweathermap.org/data/2.5/forecast?id=524901&appid=b6907d289e10d714a6e88b30761fae22)获取第一个temp_min和temp_max。
我试图将JSON响应发布到JSON格式化程序中,并在逻辑上进行检查,但这并没有太大帮助。在整个Google上尝试了不同的解决方案。
我这边的最后一次尝试是:
JSONObject jsonObject = new JSONObject(response);
JSONArray array = jsonObject.getJSONArray("list");
JSONObject firstObject = (JSONObject)array.get(0);
String tempmax = firstObject.getJSONObject("main").getString("temp_max");
String tempmin = firstObject.getJSONObject("main").getString("temp_min");
从以下API响应中,我想接收temp_min和temp_max:
{
"cod":"200",
"message":0.0032,
"cnt":36,
"list":[
{
"dt":1487246400,
"main":{
"temp":286.67,
"temp_min":281.556,
"temp_max":286.67,
"pressure":972.73,
"sea_level":1046.46,
"grnd_level":972.73,
"humidity":75,
"temp_kf":5.11
},
"weather":[ ],
"clouds":{ },
"wind":{ },
"sys":{ },
"dt_txt":"2017-02-16 12:00:00"
},
[..]
我希望从API响应中获取temp_min和temp_max值,但目前它只是空的。
答案 0 :(得分:1)
我刚刚使用this库(具有最新版本)检查了您的代码。我从本地文件加载了json内容,我不得不更改读取温度值的方式:
public static void main(String[] args) throws IOException {
String collect = Files.lines(Paths.get("src/main/resources/waether.json")).collect(Collectors.joining());
JSONObject jsonObject = new JSONObject(collect);
JSONArray array = jsonObject.getJSONArray("list");
JSONObject firstObject = (JSONObject)array.get(0);
double tempmax = firstObject.getJSONObject("main").getDouble("temp_max");
double tempmin = firstObject.getJSONObject("main").getDouble("temp_min");
System.out.println("Temp min " + tempmin);
System.out.println("Temp max " + tempmax);
}
输出为:
Temp min 259.086
Temp max 261.45
如您所见,我必须使用getDouble
方法,因为这些值不是json字符串-它们是数字。我不确定您使用的是哪个版本的库,但是它可以使用最新版本。
答案 1 :(得分:0)
非常感谢michalk和其他人的帮助。编辑了michalk的答案,使其符合我的项目并解决了我遇到的问题。