2016-08-30 1 views
4

잭슨을 Java 컬렉션으로 변환하는 적절한 방법은 무엇입니까? JsonNode 이 JSON 문자열 인 경우Jackson JsonNode from typed Collection

나는 ObjectMapper.readValue(String, TypeReference)를 사용할 수 있지만 JsonNode에 대한 유일한 옵션은 변환을 위해 어떠한 POJO를 수용 계정에 잘못된 느낌 입력 된 모음 또는 ObjectMapper.convertValue(Object, JavaType)을주지 못할 것이다 ObjectMapper.treeToValue(TreeNode, Class)이다.

다른 "올바른"방법이 있습니까? 아니면 이것 중 하나입니까?

답변

10

원하는 형식화 된 컬렉션을 설명하는 TypeReference을 사용하여 을 ObjectMapper#readerFor(TypeReference)으로 가져옵니다. 그런 다음 ObjectReader#readValue(JsonNode)을 사용하여 JsonNode (아마도 ArrayNode 일 것임)을 구문 분석합니다.

예를 들어, 단지 JSON 문자열

이전 잭슨 버전 (2.5) 전에있어서
ObjectMapper mapper = new ObjectMapper(); 
// example JsonNode 
JsonNode arrayNode = mapper.createArrayNode().add("one").add("two"); 
// acquire reader for the right type 
ObjectReader reader = mapper.readerFor(new TypeReference<List<String>>() { 
}); 
// use it 
List<String> list = reader.readValue(arrayNode); 
+0

함유 JSON 배열 밖으로 List<String>를 얻기 위해, 더 readerFor() 메소드가 없다. 대신 reader() 메서드를 사용하십시오. –