前提・実現したいこと
Java8でOpenWeatherMapのAPIを叩いてレスポンスとしてもらったJSONを
JsonInJavaのJSONObjectを使ってHashMapに変換して出力するというプログラムを書いていたのですが、下のようなエラーがでてしまったので解決策を教えていただきたいです。
「JSONObjectのコンストラクタへ渡す引数の型が間違ってるよ」っていうエラーだと思うんですけど、参考にしたこちらのサイト(https://www.sejuku.net/blog/39599)でもString型の引数を渡しているので正直お手上げ状態です。
発生している問題・エラーメッセージ
{"coord":{"lon":139.76,"lat":35.68},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"base":"stations","main":{"temp":32.4,"pressure":1013,"humidity":56,"temp_min":30,"temp_max":34},"visibility":16093,"wind":{"speed":2.6,"deg":120},"clouds":{"all":20},"dt":1531709760,"sys":{"type":1,"id":7622,"message":0.0088,"country":"JP","sunrise":1531683419,"sunset":1531735002},"id":1850147,"name":"Tokyo","cod":200} Exception in thread "main" java.lang.NullPointerException at java.io.StringReader.<init>(Unknown Source) at org.json.JSONTokener.<init>(JSONTokener.java:94) at org.json.JSONObject.<init>(JSONObject.java:357) at WeatherTest3.main(WeatherTest3.java:35)
該当のソースコード
import java.io.*; import java.net.*; import java.util.*; import org.json.JSONObject; public class WeatherTest3{ public static void main(String[] args) { String BASE_URL="http://api.openweathermap.org/data/2.5/weather"; String CITY="Tokyo"; String API_KEY="XXXX"; String url=BASE_URL+"?q="+CITY+",jp&units=metric&appid="+API_KEY; String line="";//json格納用配列 try { // HTTP接続を確立し,処理要求を送る HttpURLConnection conn = (HttpURLConnection)(new URL(url)).openConnection(); conn.connect(); //WebAPIから結果を出力 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8")); while( (line = br.readLine()) != null) { System.out.println(line);//出力1 } br.close(); conn.disconnect(); } catch (IOException ex) { ex.printStackTrace(); } JSONObject obj = new JSONObject(line);//35行目 Map<String, Object> map = new HashMap<>(); for(Object key : obj.keySet()) { map.put((String) key, obj.get((String) key)); } System.out.println(map); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/16 05:03