4

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

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

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

4

3 回答 3

3

您可以简单地使用JsonNode.iterator()方法来获取节点的所有子节点(达到您需要的级别)。您可以检查节点JsonNode.isArrayJsonNode.isObject任何其他类型以停止深度优先搜索。您需要的其他一切都与tree traversal相关。

于 2012-04-13T20:34:51.540 回答
2

如果只想比较 t1 和 t2,可以写成 t1.equals(t2) 这么简单。我假设 t1 和 t2 是 JsonNode 类型,它实现了 equals 方法。

于 2012-04-13T22:59:40.007 回答
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;
 }

这是一个递归的、如此庞大或深度嵌套的文档可能会出现问题,但这对于正常情况应该可以正常工作。

于 2012-04-13T18:13:56.300 回答