我有很多包含json数据的文本文件,我在Jackson json解析器中使用新的ObjectMapper()。readTree()方法将json数据解析为DOM树。
现在假设我现在有两个DOM树--t1和t2。每棵树都有许多子节点,而这些子节点又有许多子节点。
我想要做的是逐个节点遍历树t1,并将t1中的每个节点与t2中的每个节点进行比较。 我知道Jackson json解析器允许我查询特定节点,但是如何逐个遍历整个树节点?
答案 0 :(得分:3)
您可以简单地使用JsonNode.iterator()
方法获取节点的所有子节点(达到您需要的级别)。您可以检查节点JsonNode.isArray
或JsonNode.isObject
或任何其他类型,以便停止深度优先搜索。您需要的其他所有内容都与trees traversal相关。
答案 1 :(得分:2)
如果你只想比较t1和t2,你可以写得像t1.equals(t2)一样简单。我假设t1和t2是JsonNode类型,它实现了equals方法。
答案 2 :(得分:1)
boolean NodesEqual(JsonNode n1, JsonNode n2) {
if(n1.size()!=n2.size())return false;
// ... other equality checks, like name, data type, etc
for(int i=0;i<n.size();i++){
JsonNode child1 = n1.get(i);
JsonNode child2 = n2.get(i);
if(!NodesEqual(child1,child2)) return false;
}
return true;
}
这是递归的,如此大规模或深度嵌套的文档可能有问题,但这应该适用于正常情况。