2016-08-30 69 views
4

什么是将Jackson JsonNode转换为java集合的正确方法?Jackson JsonNode键入集合

如果它是一个JSON字符串我可以用ObjectMapper.readValue(String, TypeReference)但对于一个JsonNode的唯一选择是ObjectMapper.treeToValue(TreeNode, Class)这不会给一个类型集合,或ObjectMapper.convertValue(Object, JavaType)这感觉不对由于其接受转换任何POJO的。

有没有另一种“正确”的方式,还是它是其中之一?

回答

10

使用TypeReferenceObjectMapper#readerFor(TypeReference)获取ObjectReader,其中描述了您想要的类型化集合。然后使用ObjectReader#readValue(JsonNode)解析JsonNode(推测为ArrayNode)。

例如,要得到一个List<String>出仅含有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和之前)JSON数组的,没有readerFor()方法。改用reader()方法。 –