2016-08-30 40 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()方法。 –