在使用 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 反序列化期间忽略丢失的属性
用于在反序列化期间忽略未知属性的 SpringMVC 全局设置
如何忽略像“car”这样的空 json 对象:,这会在使用 jackson 反序列化后导致空 pojos
使用 com.fasterxml.jackson.databind.ObjectMapper 在序列化/反序列化 JSON 内容期间从异常日志中删除敏感数据