Jackson json : parcours d'une json arbre de nœud en nœud
J'ai de nombreux fichiers de texte contenant des données json et je suis en utilisant de nouvelles ObjectMapper().readTree() la méthode de Jackson json analyseur de parser le json de données à DOM arbres.
Disons que maintenant j'ai maintenant deux DOM arbres t1 et t2. Chaque arbre aura de nombreux enfants les nœuds, ce qui permettra d'avoir de nombreux enfants nœuds.
Ce que je voudrais faire est de parcourir l'arbre t1 de nœud en nœud et de comparer chaque nœud t1 avec chaque nœud dans t2.
Je sais Jackson parser json me permet d'interroger des noeuds, mais comment puis-je traverser toute une arborescence de nœud en nœud?
OriginalL'auteur athreya86 | 2012-04-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
JsonNode.iterator()
méthode pour obtenir tous les sous-nœuds d'un nœud (à un niveau dont vous avez besoin). Vous pouvez vérifier si un nœudJsonNode.isArray
ouJsonNode.isObject
ou tout autre type afin d'arrêter profond première recherche. Tout ce que vous avez besoin est juste lié à les arbres de la traversée.Que diriez-vous un exemple?
OriginalL'auteur Eugene Retunsky
Si vous voulez juste pour comparer t1 et t2, vous pouvez écrire aussi simple que t1.est égal à(t2). Je suppose que t1 et t2 sont JsonNode type qui a mis en œuvre la méthode equals.
OriginalL'auteur wanghq
C'est récursive, tellement énorme, ou profondément imbriqués les documents peuvent avoir des problèmes, mais cela devrait fonctionner pour les cas normaux.
JsonNode implémente equals() déjà -- exemple de code est un peu superflu...
Vous devez être d'accord, à moins que votre profondeur d'imbrication est dans les milliers. Dans ce cas, vous pourriez avoir des problèmes avec la VM taille de la pile, je soupçonne cependant, vous devez exécuter dans les mêmes problèmes avec la TreeMapper premier. Si vous le faites, alors vous pouvez utiliser non-récursive de la mise en œuvre, mais ceux qui sont un peu plus verbeux. Voir [Ce] (stackoverflow.com/questions/1294701/...) pour commencer.
Staxman peut-être raison, voir la JSONNode ObjectNode sous-classe source (ce qui correspond à la mise en œuvre commence à la ligne 533) pour voir si cela pourrait fonctionner pour vous.
OriginalL'auteur gbegley