繁体   English   中英

如何在杰克逊反序列化中删除未知的枚举键?

[英]How to remove an unknown enum key on Jackson deserialization?

我有一个Map<Alert, Boolean> Map,其中填充了相应的JSON:

{
   "BUTTON": true,
   "UNKNOWN": false
}

我发现我可以使用DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL将Jackson配置为true,以将null替换为未知的枚举(此处为“UNKNOWN”)。

我怎样才能忽略UNKNOWN枚举而不在地图中放置null?

反序列化后立即删除null条目:

ObjectMapper om = new ObjectMapper()
    .enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL);

Map<Alert, Boolean> map = om.readValue(json, new TypeReference<HashMap<Alert, Boolean>>() {});
map.remove(null);

保持简单并在杰克逊使用您描述的方法完成反序列化后执行以下行:

map.remove("UNKNOWN");

无论您的JSON文档包含多少个未知枚举,您总是会在地图中找到一个“UNKNOWN”键。

我很抱歉,但是我的初步回答中,我将“未知”作为地图键,使我的水域变得混乱。 不幸的是,在@Henrik发布答案之前,我没有机会纠正我的帖子。 因此,正确删除冗余映射键应该是:

map.remove(null)

BTW。 我并没有因为这次更正而声称有任何功劳,而只是记录在案。

在查看其他选项时,似乎没有可用于满足您需求的反序列化属性。 虽然您可以实现自己的JsonDeserializer,但您需要解析整个JSON文档并自己构建地图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM