使用 Jackson 处理未知的 JSON 属性
Posted
技术标签:
【中文标题】使用 Jackson 处理未知的 JSON 属性【英文标题】:Handling Unknown JSON Properties with Jackson 【发布时间】:2010-05-04 08:34:22 【问题描述】:对于将具有未知字段的 json 反序列化为对象,可以使用 @JsonAnySetter。
但是,如果我将这样的 json 读入我的对象,修改一些已知字段并将其写回 json,该怎么办? 未知属性将丢失。
我该如何处理这种情况?是否可以映射对象或者我必须将数据读入 JsonNode 或 Map?
【问题讨论】:
jira.codehaus.org/browse/JACKSON-292 【参考方案1】:解组到自定义 java 类有其优点和缺点。它为您提供了不错的静态类型,但它很好,是静态的。 @JsonAnySetter
的 javadoc 表明它类似于 JAXB 的 @XmlAnyElement
,但与 @XmlAnyElement
不同的是,数据对象不包含命名信息,因此它是一条单行道。
如果您需要处理动态 JSON 流,那么您需要硬着头皮使用 Map
或 JsonNode
。
【讨论】:
【参考方案2】:现在可以使用@JsonAnyGetter
提供一种允许动态属性序列化的方法:
@JsonAnyGetter
public Map<String, String> getDynamicProperties()
return dynamicProperties; // a field like this exists
【讨论】:
【参考方案3】:Jackson 有这个 RFE:http://jira.codehaus.org/browse/JACKSON-292 添加这样的功能。仔细想想就完全有道理。
【讨论】:
该功能本身将在发布时进入 1.6以上是关于使用 Jackson 处理未知的 JSON 属性的主要内容,如果未能解决你的问题,请参考以下文章
您如何全局设置 Jackson 以忽略 Spring 中的未知属性?
在使用 Jackson 反序列化期间选择性地忽略 JSON 属性
jackson 序列化忽略未知字段: How to Ignore Unknown Properties While Parsing JSON in Java