这看起来有点不寻常,但我正在寻找一种有效的方法来将 JsonNode
转换/映射到 POJO
.
我将一些Model的信息存储在json文件中,我必须支持我的模型的几个版本 .
我所做的是将json文件加载到JsonNode的内存中,应用几个版本控制策略使其与我的Model的最新版本匹配 .
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);
除非有更快的方法,否则我可能最终只需手动将 JsonNodes
应用于我的模型
4 回答
如果您的JSON输入具有比POJO更多的属性,并且您只想忽略Jackson 2.4中的附加内容,则可以按如下方式配置ObjectMapper . This syntax is different from older Jackson versions. (如果使用错误的语法,它将默默地执行任何操作 . )
在Jackson 2.4中,您可以转换如下:
其中
jsonObjectMapper
是 JacksonObjectMapper
.在 Jackson 的旧版本中,它会是
这应该做的伎俩:
我说应该因为我使用的是
String
,而不是BufferedReader
但它应该仍然有用 .这是我的代码:
这是该电话的官方文件:http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class)
您还可以在实例化
ObjectMapper
时定义自定义反序列化器:http://wiki.fasterxml.com/JacksonHowToCustomDeserializers编辑:我只想起别的东西 . 如果您的对象具有比
POJO
更多的属性,并且您只想忽略您要设置的额外内容:或者你会收到一个错误,它无法找到要设置的属性 .
如果您正在使用org.codehaus.jackson,那么从1.6开始就可以实现 . 您可以使用
ObjectMapper#readValue
将JsonNode转换为POJO:[http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode](http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode),java.lang.Class)