我有许多包含json数据的文本文件,并且我正在使用Jackson json解析器中的new ObjectMapper().readTree()方法将json数据解析为DOM树。现在假设我有两个DOM树-t1和t2。每个树都将有许多子节点,这些子节点又将有许多子节点。我想做的是逐个遍历树t1的每个节点,并将t1中的每个节点与t2中的每个节点进行比较。我知道Jackson json解析器允许我查询特定节点,但是如何逐个遍历整个树的每个节点呢?
JsonNode.iterator()
方法获取节点的所有子节点(到您需要的级别)。 您可以检查节点JsonNode.isArray
或JsonNode.isObject
或任何其他类型,以停止深度优先搜索。您需要的其他一切都与树遍历相关。 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;
}
这是一个递归函数,因此大型、深度嵌套的文档可能会出现问题,但对于普通情况应该可以正常工作。