Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除Jackson反序列化中的未知枚举键?

如何删除Jackson反序列化中的未知枚举键?
EN

Stack Overflow用户
提问于 2017-01-05 08:02:31
回答 2查看 1.1K关注 0票数 3

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

代码语言:javascript
运行
AI代码解释
复制
{
   "BUTTON": true,
   "UNKNOWN": false
}

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

我怎么能忽略未知的枚举而不将null放在Map中呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-05 13:33:36

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

代码语言:javascript
运行
AI代码解释
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2017-01-05 10:54:13

保持简单,并在Jackson使用您所描述的方法完成反序列化之后执行以下行:

代码语言:javascript
运行
AI代码解释
复制
map.remove("UNKNOWN");

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

我很抱歉,但我把“未知”作为地图键,使我的最初回答有点混乱。不幸的是,直到现在我才有机会更正我的帖子,直到@Henrik发布了他们的答案。因此,正确删除冗余映射键应该是: map.remove(null) BTW.我并不是说这次修正有任何功劳,但我只是澄清了事实。

在其他选项中,似乎没有一个反序列化属性可以满足您的需求。尽管您可以实现自己的JsonDeserializer,但是您需要解析整个JSON文档并自己构建映射。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41489470

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档