Jackson json:逐节点遍历json树节点

时间:2012-04-13 17:38:54

标签: java json jackson tree-traversal

我有很多包含json数据的文本文件,我在Jackson json解析器中使用新的ObjectMapper()。readTree()方法将json数据解析为DOM树。

现在假设我现在有两个DOM树--t1和t2。每棵树都有许多子节点,而这些子节点又有许多子节点。

我想要做的是逐个节点遍历树t1,并将t1中的每个节点与t2中的每个节点进行比较。 我知道Jackson json解析器允许我查询特定节点,但是如何逐个遍历整个树节点?

3 个答案:

答案 0 :(得分:3)

您可以简单地使用JsonNode.iterator()方法获取节点的所有子节点(达到您需要的级别)。您可以检查节点JsonNode.isArrayJsonNode.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;
 }

这是递归的,如此大规模或深度嵌套的文档可能有问题,但这应该适用于正常情况。