4

JSONデータを含む多数のテキストファイルがあり、Jackson jsonパーサーで新しいObjectMapper().readTree()メソッドを使用して、jsonデータをDOMツリーに解析しています。

t1 と t2 という 2 つの DOM ツリーがあるとします。各ツリーには多くの子ノードがあり、さらに多くの子ノードがあります。

私がやりたいのは、ツリー t1 ノードをノードごとにトラバースし、t1 のすべてのノードを t2 のすべてのノードと比較することです。Jackson json パーサーを使用すると特定のノードにクエリを実行できることは知っていますが、ツリー全体をノードごとにトラバースするにはどうすればよいでしょうか?

4

3 に答える 3

3

JsonNode.iterator()メソッドを使用して、ノードのすべてのサブノードを(必要なレベルまで)簡単に取得できます。ディープファースト検索を停止するために、ノードJsonNode.isArrayまたはJsonNode.isObjectその他のタイプかどうかを確認できます。他に必要なものはすべて、trees traversalに関連するものです。

于 2012-04-13T20:34:51.540 に答える
2

t1 と t2 を比較したいだけなら、t1.equals(t2) のように簡単に記述できます。t1 と t2 は equals メソッドを実装した JsonNode 型だとします。

于 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 に答える