将 JsonNode 转换为 POJO

新手上路,请多包涵

这可能看起来有点不寻常,但我正在寻找一种有效的方法来将 JsonNode 转换/映射到 POJO

我将模型的一些信息存储在 json 文件中,并且我必须支持我的模型的几个版本。

我所做的是将 json 文件加载到 JsonNode 的内存中,应用几个版本控制策略使其与我的模型的最新版本匹配。

     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 应用到我的模型

原文由 Alexandre 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 417
2 个回答

在 Jackson 2.4 中,您可以按如下方式转换:

 MyClass newJsonNode = jsonObjectMapper.treeToValue(someJsonNode, MyClass.class);

其中 jsonObjectMapper 是杰克逊 ObjectMapper


在杰克逊的旧版本中,它将是

MyClass newJsonNode = jsonObjectMapper.readValue(someJsonNode, MyClass.class);

原文由 icedtrees 发布,翻译遵循 CC BY-SA 3.0 许可协议

这应该可以解决问题:

 mapper.readValue(fileReader, MyClass.class);

我说应该是因为我使用的是 String ,而不是 BufferedReader 但它应该仍然有效。

这是我的代码:

 String inputString = // I grab my string here
MySessionClass sessionObject;
try {
    ObjectMapper objectMapper = new ObjectMapper();
    sessionObject = objectMapper.readValue(inputString, MySessionClass.class);

这是该调用的官方文档: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 拥有更多的属性,而你只是想忽略你想要设置的额外内容:

     objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

或者你会得到一个错误,它找不到要设置的属性。

原文由 Eric Barr 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题