在重复的情况下,ObjectMapper默认只保留其中一个元素作为键。即,最后一个元素将始终是存储的元素。例如:
{ “名字”:“xyz”, “名字”:“abc” }
如果我们在上面的树上使用ObjectMapper readTree,它将深入到:
--> ObjectMapper.readTree(<json-input>)
--> ObjectMapper._readMapAndClose
--> BaseNodeDeseralizer.deserializeObject
--> JsonNode old = node.replace(key, value); // replaces a key in case of duplicates
以上将在树中添加“name”:“xyz”,然后在第二次运行时将其替换为“name”:“abc”。
有重复项可能导致ObjectMapper失败/吐出错误的配置选项。例如:
mapper.enable(MapperFeature.IGNORE_DUPLICATE_MODULE_REGISTRATIONS);
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
但我找不到允许重复的配置选项。
我已经尝试重写deserializeObject方法以不进行替换。但这似乎是不明智的,因为我的覆盖方法将“脱离”库的方法,我将无法获取未来的更新/修复。
我的问题是:是否允许ObjectMapper保留重复的密钥(给定它使用的数据结构)?如果是这样,怎么样?