我正在为我的项目使用openweatherMap api。这个想法是获取任何地方的当前天气。我使用gson转换json文件,并且一切似乎都能正常工作。我正在尝试获取当前的“描述”天气来自json文件,但是它存储在arraylist中,所以我得到了无法将arraylist转换为map的错误,而且如果不对程序进行重大更改,我将无法解决此问题
这是我要解析的json文件: https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22
一切都适用于json文件中的主要和风力信息,但不适用于天气,因为它是arraylist。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.*;
import com.google.gson.reflect.*;
public class DailyForecst {
public static Map<String,Object> jsonToMap(String str){
Map<String,Object> map = new Gson().fromJson(str,new
TypeToken<HashMap<String,Object>> () {}.getType());
return map;
}
public static void main(String[] args) {
String API_KEY = "16 digit Private Key";
String LOCATION = "fresno,us";
String urlString = "http://api.openweathermap.org/data/2.5/weather?q=" + LOCATION + "&appid=" + API_KEY + "&units=imperial";
try{
StringBuilder result = new StringBuilder();
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader (conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null){
result.append(line);
}
rd.close();
System.out.println(result);
Map<String,Object > respMap = jsonToMap (result.toString());
Map<String,Object > mainmap = jsonToMap (respMap.get("main").toString());
Map<String,Object > windMap = jsonToMap (respMap.get("wind").toString());
Map<String,Object> weatherMap = (Map<String,Object>) respMap.get("weather");
// Map<String,Object > weatherMap = jsonToMap (respMap.get("weather").toString());
System.out.println("Location: " + LOCATION);
System.out.println("Current Temperature: " + mainmap.get("temp") );
System.out.println("Current Humidity: " + mainmap.get("humidity") );
System.out.println("Max: " + mainmap.get("temp_min") );
System.out.println("Min: " + mainmap.get("temp_max") );
System.out.println("Desc: " + weatherMap.get("description") );
System.out.println("Wind Speed: " + windMap.get("speed") );
System.out.println("Wind Angle: " + windMap.get("deg") );
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
我试图做与主风相同的方法:Map weatherMap = jsonToMap(respMap.get(“ weather”)。toString()); 。但是我出现了错误:
//// java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第3列路径$ [0]处为BEGIN_OBJECT
因此,我尝试不将json转换为Map,而是直接使用诸如map weatherMap =(Map)respMap.get(“ weather”);之类的地图。但是我得到了
///// java.lang.ClassCastException:无法将java.util.ArrayList强制转换为java.util.Map