无法将JSON反序列化为POJO(使用Jackson)

时间:2013-01-24 21:37:59

标签: java json jackson

我正在使用Jackson将以下JSON反序列化为POJO:

{
    "etag": "\"SomeETag\"",
    "jobComplete": true,
    "jobReference": {
        "jobId": "someJobId",
        "projectId": "someProjectId"
    },
    "rows": [
        {
            "f": [
                {
                    "v": "101"
                },
                {
                    "v": "FirstService"
                },
                {
                    "v": "firstAPI"
                }
            ]
        },
        {
            "f": [
                {
                    "v": "102"
                },
                {
                    "v": "SecondService"
                },
                {
                    "v": "SecondAPI"
                }
            ]
        }
    ],
    "totalRows": "2"
}

这是我正在使用的POJO:

    @JsonAutoDetect
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Response {

        public String etag;
        public boolean jobComplete;
        public List<FWrapper> rows = new ArrayList<FWrapper>();
    }

    class FWrapper {
        public F f; 
    }

    class F {
        public List<VWrapper> vWrappers = new ArrayList<VWrapper>();       
    }

    class VWrapper {
        public String v;
    }

我正在使用这段代码进行映射:

    ObjectMapper mapper = new ObjectMapper();
    Response response = mapper.readValue(response, Response.class);

这是我得到的错误:

  

org.codehaus.jackson.map.JsonMappingException:无法从START_ARRAY标记中反序列化mypackage.F的实例    在[来源:java.io.StringReader@11563ff; line:1,column:227](通过引用链:mypackage.Response [“rows”] - &gt; mypackage.FWrapper [“f”])

我检查了几个有类似错误的旧问题,但还是无法解决我的问题。This 一个看起来与我的非常相似,正确的回答是Your data is problematic in that you have inner wrapper objects in your array,我认为我的数据也是如此。但我仍然无法做正确的POJO映射。任何指针都将受到赞赏。

编辑:更正了一个拼写错误(Json我使用的是有效的)

2 个答案:

答案 0 :(得分:5)

您的班级模型与您的JSON不匹配。

在你的JSON中,f是一个数组而不是一个对象。在你的班级中,F是一个包含东西列表的对象。

这样的映射应该有效(未经测试)

public class Response {

    public String etag;
    public boolean jobComplete;
    public List<F> rows;
}


public class F {
    public List<V> f;
}

public Class V {
    public String v;
}

答案 1 :(得分:0)

您的“行”数组没有结束方括号]

它使JSON无效。

仔细阅读错误消息:

org.codehaus.jackson.map.JsonMappingException:无法在[来源:java.io.StringReader@11563ff;来源:java.io.StringReader@11563ff;反序列化来自START_ARRAY令牌的mypackage.F 的实例。 line:1,column:227](通过参考链:mypackage.Response [“rows”] - &gt; mypackage.FWrapper [“f”])


现在我看到你修改了JSON - 添加了它。

你还有同样的问题吗?