Jackson JsonNode to typed Collection

kag0 picture kag0 · Aug 31, 2016 · Viewed 40.8k times · Source

What is the proper way to convert a Jackson JsonNode to a java collection?

If it were a json string I could use ObjectMapper.readValue(String, TypeReference) but for a JsonNode the only options are ObjectMapper.treeToValue(TreeNode, Class) which wouldn't give a typed collection, or ObjectMapper.convertValue(Object, JavaType) which feels wrong on account of its accepting any POJO for conversion.

Is there another "correct" way or is it one of these?

Answer

Sotirios Delimanolis picture Sotirios Delimanolis · Aug 31, 2016

Acquire an ObjectReader with ObjectMapper#readerFor(TypeReference) using a TypeReference describing the typed collection you want. Then use ObjectReader#readValue(JsonNode) to parse the JsonNode (presumably an ArrayNode).

For example, to get a List<String> out of a JSON array containing only JSON strings

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);