我最近在学习java,当我想解析天气网站上的数据时,我收到了这个错误,我仍然无法理解,有人能说出我为什么会收到这个错误: java.lang.NullPointerException ?
public class main {
public static void main(String []args) {
try {
URL url = new URL("http://api.worldweatheronline.com/premium/v1/past-weather.ashx?key=caa2f68a7b2b43a09c115021171404&format=json&q=atlanta&date=2015-07-20&tp=24");
InputStream is = url.openStream();
JsonReader rdr = Json.createReader(is);
JsonObject obj = rdr.readObject();
JsonArray data = obj.getJsonArray("weather");
JsonObject objectOfData = data.getJsonObject(0);
System.out.println(objectOfData.getString("date"));
} catch (Exception ex){
System.out.println(ex);
}
}
}
这是从Postman解析的数据:
以下是跟踪日志:
这是第19行的图片
答案 0 :(得分:1)
第1部分:回调错误
我在浏览器中检查了你的网址,看来你设置了回调参数,用一个请求回调来包装json,如下所示:
请求 {"数据":....} )
解析器挂在第一个字符上,它没有被识别为正确的json。
请尝试使用此网址:
第2部分:空指针异常
json正在被无序解析。您需要从根元素"数据"创建一个对象。在访问阵列之前。
try {
URL url = new URL("http://api.worldweatheronline.com/premium/v1/past-weather.ashx?key=caa2f68a7b2b43a09c115021171404&format=json&q=atlanta&date=2015-07-20&tp=24");
InputStream is = url.openStream();
JsonReader rdr = Json.createReader(is);
JsonObject obj = rdr.readObject();
JsonObject objectOfData = (JsonObject) obj.get("data");
JsonArray data = objectOfData.getJsonArray("weather");
JsonObject a = data.getJsonObject(0);
System.out.println(a.getString("date"));
} catch (Exception ex){
System.out.println(ex);
}
答案 1 :(得分:1)
您可以在catch方法中打印堆栈跟踪,并找出哪一行存在错误并采取相应措施。