2016-08-30 3 views
4

Что такое правильный способ конвертировать Jackson JsonNode в коллекцию java?Jackson JsonNode для набрания коллекции

Если бы это была строка JSON я мог бы использовать ObjectMapper.readValue(String, TypeReference) но для JsonNode только варианты ObjectMapper.treeToValue(TreeNode, Class), которые не будут давать коллекцию типизированной или ObjectMapper.convertValue(Object, JavaType), который чувствует себя неправильно по причине его принятия какого-либо POJO для преобразования.

Есть ли другой «правильный» способ или это один из них?

ответ

10

Приобретите ObjectReader с помощью ObjectMapper#readerFor(TypeReference), используя TypeReference, описывая типизированную коллекцию, которую вы хотите. Затем используйте ObjectReader#readValue(JsonNode), чтобы разобрать JsonNode (предположительно ArrayNode).

Например, чтобы получить List<String> из массива JSON, содержащий только JSON строки

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

В старых версиях Джексона (2.5 и выше), не существует никакого метода readerFor(). Вместо этого используйте метод reader(). –