2016-04-17 7 views
0

Я работал над декодированием jons в reponses в рамке springmvc и использует переходник jackson в качестве реализации. Теперь есть случай. некоторые объекты огромны и с очень глубокими уровнями, я хочу захватить самые нижние уровни информации для этого. Есть ли способ, как jsonPath, аннотируя поле или что-то подобное, что могло бы помочь мне?Поддерживает ли Jackson JsonPath Annotation

ответ

2

Один из самых простых способов сделать это - перенести корень на указанный узел JSON с помощью функции «at».

В приведенном ниже примере я переместил корневой узел на node3. Я добавил пример того, как преобразовать node3 в простой POJO. Также вы можете напрямую обращаться к дочерним узлам, не преобразовывая их в POJO.

private static final String JSON = "{\"node1\": {\"node2\": {\"node3\": {\"title2\":\"test\"}}}}"; 

public static void main(String []args) throws IOException { 
    ObjectMapper mapper = new ObjectMapper(); 
    JsonNode root = mapper.readTree(JSON); 

    JsonNode node = root.at("/node1/node2"); 
    System.out.println(node); 
    System.out.println("-----------------"); 
    JsonNode node3 = node.at("/node3"); 
    System.out.println(node3); 
    System.out.println(node3.asText()); 
    System.out.println("-----------------"); 
    Node result = mapper.readValue(node3.toString(), Node.class); 

    System.out.println(result); 
} 

Обратите внимание, что метод at никогда не будет возвращать null! От метода Javadoc:

Method will never return null; if no matching node exists, 
will return a node for which {@link #isMissingNode()} returns true. 

я могу прийти с ответом, который является более актуальным для вашей проблемы, если вы разместите пример JSON и дать мне некоторое представление о том, какие узлы вы хотите игнорировать и то, что узел вы хотите, чтобы разобрать ,

Смежные вопросы