Cela peut sembler un peu inhabituel, mais je recherche un moyen efficace de transformer / mapper un JsonNode
en un fichier POJO
.
Je stocke certaines des informations de mon modèle dans des fichiers json et je dois prendre en charge quelques versions de mon modèle.
Ce que je fais, c'est charger le fichier json en mémoire dans un JsonNode, appliquer quelques stratégies de contrôle de version pour le faire correspondre à la dernière version de mon modèle.
ObjectMapper mapper = new ObjectMapper();
BufferedReader fileReader = new BufferedReader(new FileReader(projPath));
JsonNode rootNode = mapper.readTree(fileReader);
//Upgrade our file in memory
applyVersioningStrategy(rootNode);
ProjectModel project = mapJsonNodeToProject(rootNode);
À moins qu'il n'y ait un moyen plus rapide de le faire, je finirai probablement par appliquer simplement manuellement le JsonNodes
à mon modèle
jsonObjectMapper.readValue(jsonObjectMapper.treeAsTokens(someJsonNode), someTypeReference)
objectMapper.treeToValue(jsonNode, MyClass.class)
p.codec.treeToValue
.Cela devrait faire l'affaire:
Je dis que je devrais parce que je l'utilise avec un
String
, pas un,BufferedReader
mais cela devrait toujours fonctionner.Voici mon code:
Voici la documentation officielle pour cet appel: http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class)
Vous pouvez également définir un désérialiseur personnalisé lorsque vous instanciez le
ObjectMapper
: http://wiki.fasterxml.com/JacksonHowToCustomDeserializersEdit: Je viens de me rappeler autre chose. Si votre objet entrant a plus de propriétés que le
POJO
a et que vous voulez simplement ignorer les extras, vous voudrez définir ceci:Ou vous obtiendrez une erreur dans laquelle il ne peut pas trouver la propriété à définir.
la source
Si vous utilisez org.codehaus.jackson, cela est possible depuis la version 1.6. Vous pouvez convertir un JsonNode en POJO avec
ObjectMapper#readValue
: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode , java. lang.Class)la source
Si votre entrée JSON dans a plus de propriétés que votre POJO et que vous voulez simplement ignorer les extras de Jackson 2.4, vous pouvez configurer votre ObjectMapper comme suit. Cette syntaxe est différente des anciennes versions de Jackson. (Si vous utilisez la mauvaise syntaxe, cela ne fera rien en silence.)
la source