Esto puede parecer un poco inusual, pero estoy buscando una manera eficiente de transformar / mapear a JsonNode
en a POJO
.
Guardo parte de la información de mi modelo en archivos json y tengo que admitir un par de versiones de mi modelo.
Lo que hago es cargar el archivo json en la memoria en un JsonNode, aplicar un par de estrategias de versiones para que coincida con la última versión de mi Modelo.
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);
A menos que haya una forma más rápida de hacerlo, probablemente termine simplemente aplicando manualmente JsonNodes
a mi Modelo
jsonObjectMapper.readValue(jsonObjectMapper.treeAsTokens(someJsonNode), someTypeReference)
objectMapper.treeToValue(jsonNode, MyClass.class)
p.codec.treeToValue
.Esto debería funcionar:
Digo debería porque lo estoy usando con un
String
, no con unBufferedReader
pero todavía debería funcionar.Aquí está mi código:
Aquí está la documentación oficial para esa llamada: http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class)
También puede definir un deserializador personalizado cuando crea una instancia de
ObjectMapper
: http://wiki.fasterxml.com/JacksonHowToCustomDeserializersEditar: acabo de recordar algo más. Si su objeto entrante tiene más propiedades que las que
POJO
tiene y solo quiere ignorar los extras, querrá configurar esto:O recibirá un error que no puede encontrar la propiedad para establecer.
fuente
Si está usando org.codehaus.jackson, esto ha sido posible desde 1.6. Puede convertir un JsonNode en un POJO con
ObjectMapper#readValue
: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode , java. lang.Class)fuente
Si su entrada JSON tiene más propiedades que su POJO y solo quiere ignorar los extras en Jackson 2.4, puede configurar su ObjectMapper de la siguiente manera. Esta sintaxis es diferente de las versiones anteriores de Jackson. (Si usa la sintaxis incorrecta, no hará nada en silencio).
fuente