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

标签 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: Can not deserialize instance of mypackage.F out of START_ARRAY token at [Source: java.io.StringReader@11563ff; line: 1, column: 227] (through reference chain: mypackage.Response["rows"]->mypackage.FWrapper["f"])

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

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

最佳答案

您的类模型与您的 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;
}

关于java - 无法将 JSON 反序列化为 POJO(使用 Jackson),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511262/

相关文章:

java - Websphere 7 找不到 ActionServlet

java - 使用 Ajax 发布 JSON 对象

java - 使用 findAll 子树意外结束

python - 如何在python中将json转换为树

json - 获取 AJAX 使用从 Flask 发送的 JSON 数据填充数据表并单独渲染 html

JSON 不返回 Spring Data REST 中的列

java - jackson Blob 异常

java - Jackson JSON 给出了嵌套类集合的异常

java - 无法删除openjdk debian9.6

java - Selenium webdriver 轮询时间