Utilisation de Jackson pour mapper un object à partir d’un nœud spécifique dans une arborescence JSON

Est-il possible d’avoir ObjectMapper de Jackson unmarshall uniquement à partir d’un nœud spécifique (et “down”) dans une arborescence JSON?

Le cas d’utilisation est un format de document extensible. Je souhaite parcourir l’arborescence, puis publier le chemin actuel sur un ensemble extensible de plug-ins, pour voir si l’utilisateur utilise des plug-ins qui savent quoi faire avec cette partie du document.

J’aimerais que les auteurs de plug-in n’aient pas à gérer les détails de bas niveau de JsonNode ou de l’API de streaming; Au lieu de cela, il suffit de passer un contexte et un JsonNode spécifique, puis de pouvoir utiliser JsonNode , charmant et pratique, pour ObjectMapper instance de leur classe, en considérant le nœud transmis comme racine de l’arbre.

Considérez le JSON suivant:

 { "firstName": "John", "lastName": "Doe", "address": { "street": "21 2nd Street", "city": "New York", "postalCode": "10021-3100", "coordinates": { "latitude": 40.7250387, "longitude": -73.9932568 } } } 

Et considérez que vous souhaitez parsingr le nœud de coordinates dans la classe Java suivante:

 public class Coordinates { private Double latitude; private Double longitude; // Default constructor, getters and setters omitted } 

Pour ce faire, parsingz l’ensemble du JsonNode JSON dans un JsonNode avec ObjectMapper :

 Ssortingng json = "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"address\":{\"street\":" + "\"21 2nd Street\",\"city\":\"New York\",\"postalCode\":\"10021-3100\"," + "\"coordinates\":{\"latitude\":40.7250387,\"longitude\":-73.9932568}}}"; ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(json); 

Utilisez ensuite le pointeur JSON pour interroger le nœud de coordinates et utilisez ObjectMapper pour l’parsingr dans la classe Coordinates :

 JsonNode coordinatesNode = node.at("/address/coordinates"); Coordinates coordinates = mapper.treeToValue(coordinatesNode, Coordinates.class); 

JSON Pointer est un langage de chemin pour traverser JSON. Pour plus de détails, consultez le RFC 6901 . Il est disponible dans Jackson depuis la version 2.3.