为分层JSON映射中的特定属性编写Jackson Custom Deserializer

时间:2016-01-13 07:58:00

标签: java jackson deserialization

JSON对象:

["emp" : {
        "departments": [
            "modules": [
                {
                    "tasks": [
                        {
                            "resources": 100,
                            "notes": "" 
                        }
                    ]
                }
            ]
        ]
    }]

["emp" : { "departments": [ "modules": [ { "tasks": [ { "resources": 100, "notes": "" } ] } ] ] }] 我想将上面的JSON映射到对象。我的对象映射器看起来像:
List<Emp>

这个简单的对象映射器运行良好 我的问题是我必须以不同的方式将List<Emp> emps = Arrays.asList(mapper.readValue(jsonString, Emp[].class));对象从JSON反序列化到List<Emp> emps = Arrays.asList(mapper.readValue(jsonString, Emp[].class));对象。

我知道我们可以使用jackson编写自定义反序列化程序,但这并不能解决我的问题。 我为tasks对象编写了Task,但如下所示将此注册到Object Mapper会尝试将整个JSON(CustomeDeserializer)序列化为任务对象。{{1} }

Task

List<Emp>
有没有办法在解析过程中仅为特定属性指定? 或者有替代方案吗?

注意:我无法更改我的DTO以解决此问题。

1 个答案:

答案 0 :(得分:0)

使用Jackson解析JSON有几种选择。您可以使用Jacksons Tree model解析或streaming API。两者都需要比mapper.readValue(jsonString, Emp[].class)更多的代码,但它比实现自己的JSON解析要好得多。您可以在杰克逊文档here

中了解它们