4

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:无法从 [Source: java.io.StringReader@11563ff; 的 START_ARRAY 令牌中反序列化 mypackage.F 的实例;行:1,列:227](通过引用链:mypackage.Response["rows"]->mypackage.FWrapper["f"])

我检查了几个有类似错误的旧问题,但还没有解决我的问题。正如正确的回答所说,这个 看起来与我的非常相似Your data is problematic in that you have inner wrapper objects in your array,我认为我的数据也是如此。但是我仍然无法进行正确的 POJO 映射。任何指针将不胜感激。

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

4

2 回答 2

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;
}
于 2013-01-24T21:58:08.393 回答
0

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

它使 JSON 无效。

仔细阅读错误信息:

org.codehaus.jackson.map.JsonMappingException:无法从[Source: java.io.StringReader@11563ff;的 START_ARRAY 令牌中反序列化 mypackage.F 的实例;行:1,列:227](通过引用链:mypackage.Response[ "rows" ]->mypackage.FWrapper["f"])


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

你还有同样的问题吗?

于 2013-01-24T21:50:16.057 回答