Джексон json: пересечение дерева json node by node

У меня есть множество текстовых файлов, содержащих json-данные, и я использую новый метод ObjectMapper(). readTree() в парсере Jackson json для анализа данных json для деревьев DOM.

Скажем теперь, теперь у меня есть два дерева DOM - t1 и t2. Каждое дерево будет иметь множество дочерних узлов, которые, в свою очередь, будут иметь множество дочерних узлов.

То, что я хотел бы сделать, это пройти дерево t1 node на node и сравнить каждый node в t1 с каждым node в t2. Я знаю, что парсер Jackson json позволяет мне запрашивать определенные узлы, но как мне пройти через дерево node на node?

3 ответа

Вы можете просто использовать метод JsonNode.iterator() для получения всех подносов node (до уровня, который вам нужен). Вы можете проверить, есть ли node JsonNode.isArray или JsonNode.isObject или любой другой тип, чтобы остановить глубокий поиск. Все остальное, что вам нужно, просто связано с обход деревьев.


Если вы просто хотите сравнить t1 и t2, вы можете написать так же просто, как t1.equals(t2). Я предполагаю, что t1 и t2 - это тип JsonNode, который реализовал метод equals.


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
<p>Это рекурсивные, так массивные или глубоко вложенные документы могут иметь проблемы, но это должно нормально работать в обычных случаях.</p>

licensed under cc by-sa 3.0 with attribution.