将JSON处理成类

时间:2013-08-02 10:22:02

标签: java json

我正在尝试处理一个json,我将从httprequest到一个类。但问题是,当我尝试将数据保存到我的班级时,他会继续崩溃

Boolean hasmore = tree.get("has_more").getBooleanValue();
    if (hasmore == true) {
        System.out.println("Ik geraak hier");
        JsonNode resourceArrayNode=tree.get("photos");
        for(JsonNode jsonNode:resourceArrayNode){
            int height=jsonNode.get("height").getIntValue();
            result[i].setHeight(height);
            //System.out.println(result[i].getHeight());
            i++;
        }

所以这是处理图片高度的代码。问题是当我用javaexceptionpointer将它设置为我的类时他会崩溃我发现它很安静,因为一切都设置正确

    Exception in thread "main" java.lang.NullPointerException
    at com.hp.gisware.panoramio.PanoramioResponseDeserializer.deserialize(PanoramioResponseDeserializer.java:29)
    at com.hp.gisware.panoramio.PanoramioResponseDeserializer.deserialize(PanoramioResponseDeserializer.java:15)
    at org.codehaus.jackson.map.ObjectReader._bindAndClose(ObjectReader.java:768)
    at org.codehaus.jackson.map.ObjectReader.readValue(ObjectReader.java:460)
    at com.hp.gisware.panoramio.GenericJsonPanoramioGeocoder.transmitLocation(GenericJsonPanoramioGeocoder.java:33)
    at com.hp.gisware.panoramio.PanoramioRunner.main(PanoramioRunner.java:26)
Disconnected from the target VM, address: '127.0.0.1:58050', transport: 'socket'

3 个答案:

答案 0 :(得分:1)

听起来你在写入结果数组时会得到一个空指针异常。 它是否已正确初始化?将这个JSON数组(可以是任意长度)写入java数组(以固定长度声明)似乎是一个糟糕的选择。您可以使用类似列表的集合吗?

或者get(“Height”)返回null。 你应该在解除引用之前检查一下:

if(jsonNode.has("Height")) {
    int height=jsonNode.get("height").getIntValue();
    result[i].setHeight(height);
}

否则请在问题中包含java异常消息。

编辑:(添加堆栈跟踪) 嗯,这很奇怪。堆栈跟踪看起来与您的代码不同 - 至少没有一个方法名称与您发布的代码中的任何内容匹配。这可能来自另一个线程吗?可能你的代码在另一个线程中触发代码来发送/接收JSON消息?你可以尝试添加一个try-catch块来捕获NullPointerException,以确认它是否真的被这段代码抛出

答案 1 :(得分:0)

有许多库可以帮助您将json对象解析为Java类。谷歌的GSON https://code.google.com/p/google-gson/

杰克逊 http://jackson.codehaus.org/

我认为你好像在使用杰克逊。请指定您使用的库和版本并发布堆栈跟踪,以便我们为您提供进一步的帮助。此外,我们似乎生活在同一个国家:荷兰。

答案 2 :(得分:0)

问题解决了我没有声明每个对象的结果不是它的类的新对象