我有一个Map<Alert, Boolean>
映射,其中填充了相应的JSON:
{
"BUTTON": true,
"UNKNOWN": false
}
我发现我可以使用DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL将Jackson配置为true,用null替换一个未知枚举(此处为“未知”)。
我怎么能忽略未知的枚举而不将null放在Map中呢?
发布于 2017-01-05 13:33:36
在反序列化之后立即删除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);
发布于 2017-01-05 10:54:13
保持简单,并在Jackson使用您所描述的方法完成反序列化之后执行以下行:
map.remove("UNKNOWN");
无论您的JSON文档包含多少个未知枚举,您总是会在映射中得到一个“未知”键。
我很抱歉,但我把“未知”作为地图键,使我的最初回答有点混乱。不幸的是,直到现在我才有机会更正我的帖子,直到@Henrik发布了他们的答案。因此,正确删除冗余映射键应该是:
map.remove(null)
BTW.我并不是说这次修正有任何功劳,但我只是澄清了事实。
在其他选项中,似乎没有一个反序列化属性可以满足您的需求。尽管您可以实现自己的JsonDeserializer,但是您需要解析整个JSON文档并自己构建映射。
https://stackoverflow.com/questions/41489470
复制