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

时间:2017-01-05 16:02:31

标签: java json object jackson deserialization

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

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

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

如何忽略UNKNOWN枚举而不在地图中输入null?

2 个答案:

答案 0 :(得分:1)

反序列化后立即删除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);

答案 1 :(得分:-1)

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

map.remove("UNKNOWN");

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

  

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

     

map.remove(null)

     

<强>顺便说一句。我并没有因为这次更正而声称有任何功劳,但只记录了这一记录。

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