OpenWeatherMap将arraylist转换为Map

我正在为我的项目使用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

xiaolongxiadoudou 回答:OpenWeatherMap将arraylist转换为Map

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3134317.html

大家都在问