解析json数据时出现java.lang.NullPointerException

时间:2017-04-14 03:19:27

标签: java json

我最近在学习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解析的数据:

enter image description here

以下是跟踪日志:

enter image description here

这是第19行的图片

enter image description here

2 个答案:

答案 0 :(得分:1)

第1部分:回调错误

我在浏览器中检查了你的网址,看来你设置了回调参数,用一个请求回调来包装json,如下所示:

请求 {"数据":....}

解析器挂在第一个字符上,它没有被识别为正确的json。

请尝试使用此网址:

http://api.worldweatheronline.com/premium/v1/past-weather.ashx?key=caa2f68a7b2b43a09c115021171404&format=json&q=atlanta&date=2015-07-20&tp=24

第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方法中打印堆栈跟踪,并找出哪一行存在错误并采取相应措施。