使用 Jackson 合并两个 JSON 文档
是否可以将两个 JSON 文档与 Jackson JSON 库合并?我基本上是在简单的Java Maps上使用Jackson映射器。
我试图在谷歌和杰克逊的文档中搜索,但找不到任何东西。
是否可以将两个 JSON 文档与 Jackson JSON 库合并?我基本上是在简单的Java Maps上使用Jackson映射器。
我试图在谷歌和杰克逊的文档中搜索,但找不到任何东西。
受StaxMans答案的启发,我实现了这种合并方法。
public static JsonNode merge(JsonNode mainNode, JsonNode updateNode) {
Iterator<String> fieldNames = updateNode.fieldNames();
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
JsonNode jsonNode = mainNode.get(fieldName);
// if field exists and is an embedded object
if (jsonNode != null && jsonNode.isObject()) {
merge(jsonNode, updateNode.get(fieldName));
}
else {
if (mainNode instanceof ObjectNode) {
// Overwrite field
JsonNode value = updateNode.get(fieldName);
((ObjectNode) mainNode).put(fieldName, value);
}
}
}
return mainNode;
}
希望这有助于某人。
一种方法是像这样使用:ObjectReader
MyBean defaults = objectMapper.readValue(defaultJson, MyBean.class);
ObjectReader updater = objectMapper.readerForUpdating(defaults);
MyBean merged = updater.readValue(overridesJson);
这将合并来自两个来源的数据。这只会形成一个浅层副本,即不对包含的对象进行递归合并。
否则,您可能只需要将JSON读取为树(),循环访问内容并手动合并。无论如何,这通常是有道理的,因为合并的规则不是微不足道的,每个人都对合并应该如何工作有自己的想法。JsonNode
编辑: (03-四月-2017)
根据@Fernando Correia的评论,实际上在即将推出的Jackson 2.9(将于2017年4月或5月发布)中添加了一项新功能,最终允许深度合并。