在使用 Jackson 反序列化期间选择性地忽略 JSON 属性

Posted

技术标签:

【中文标题】在使用 Jackson 反序列化期间选择性地忽略 JSON 属性【英文标题】:Selectively ignoring JSON properties during deserialize with Jackson 【发布时间】:2014-06-13 19:01:52 【问题描述】:

我想在反序列化阶段选择性地忽略 JSON 属性。我目前正在处理一个巨大的 JSON 文件,该文件需要很长时间才能在慢速 android 设备上反序列化,我想指定一些在应用程序生命周期的不同阶段不反序列化的属性。问题是,有时我需要数据,并且需要能够在我真正需要的时候反序列化被忽略的数据。

我正在使用 Jackson 和 ObjectMapper。

示例 POJO:

public class Pojo 
    private String name;
    private Map<String, String> data;

    ...

示例 JSON:


    "pojos" : [ 
        name : "Name",
        data : 
            "somedata1" : "somevalue1",
            "somedata2" : "somevalue2",
            "somedata3" : "somevalue3"
            ...
        
     ]

会有大量的“pojo”,每个“数据”属性都会变得巨大。所以我有时想通过忽略“数据”属性来反序列化。有时我希望“数据”能够正常反序列化。

【问题讨论】:

我们需要做的远不止这些。代码在哪里?你在使用 ObjectMapper 吗?你有一节课吗?几门课?你是手动反序列化的吗?规则是什么?数据结构是什么?一种方法是让不同的类具有不同的 JsonIgnoreProperties 注释,但没有任何信息不能说。 我也在考虑不同的类方法,但这意味着我需要更改我的服务接口,因为它依赖于序列化类类型。我用示例代码和 JSON 编辑了问题。 所以你所有的数据总是一个字符串映射?在这种情况下,您无能为力。 @Antionio 通过使用不同的类,您可以创建一个与服务接口中的类相匹配的超类,然后创建 2 个或更多子类......所以希望服务中不应更改任何内容 @AngeloImmedia 你的方法似乎是有效的,所以如果你要创建一个官方答案,我会接受它。 【参考方案1】:

通过使用不同的类,您可以创建一个与服务接口中的类相匹配的超类,然后创建 2 个或更多子类...所以希望服务中不应更改任何内容

【讨论】:

以上是关于在使用 Jackson 反序列化期间选择性地忽略 JSON 属性的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中的 Jackson JSON 反序列化期间忽略丢失的属性

Jersey 2.8客户端在反序列化期间没有忽略未知属性

用于在反序列化期间忽略未知属性的 SpringMVC 全局设置

如何忽略像“car”这样的空 json 对象:,这会在使用 jackson 反序列化后导致空 pojos

使用 com.fasterxml.jackson.databind.ObjectMapper 在序列化/反序列化 JSON 内容期间从异常日志中删除敏感数据

当值为“null”时,Jackson 忽略自定义字段反序列化器