【问题标题】:Jackson deserialization convertValue vs readValueJackson 反序列化 convertValue 与 readValue
【发布时间】:2014-02-21 21:22:06
【问题描述】:

我有一个包含 JSONObjects 的 org.json.JSONArray,我正在尝试将它们映射到 POJO。我知道要映射到的 POJO 的类型。我有 2 个选项,我正在尝试找出性能更好的选项。

选项 1:

ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.reader().withType(MyPojo.class);

for (int i = 0; i < jsonArr.length(); i++) {
    JSONObject obj = jsonArr.getJSONObject(i);
    MyPojo pojo = reader.readValue(obj.toString());

    ... other code dealing with pojo...
}

选项 2:

ObjectReader mapper = new ObjectMapper();

for (int i = 0; i < jsonArr.length(); i++) {
    JSONObject obj = jsonArr.getJSONObject(i);
    MyPojo pojo = mapper.convertvalue(obj, MyPojo.class);

    ... other code dealing with pojo...
}

为了论证,我们假设 JSONArray 的长度是 100。

从我目前看到的源代码来看,选项 1 似乎更好,因为反序列化上下文和反序列化器只创建一次,而在选项 2 的情况下,每次调用都会完成。

想法?

谢谢!

【问题讨论】:

  • 请修复您的第二个代码 sn-p 以便它编译。我想弄清楚你在问什么。
  • 请用您的发现更新此帖子,以便对其他人有所帮助。
  • 我的配音和你一样。我在 stackOverFlow 上找到了这个,可能会有所帮助:stackoverflow.com/questions/10113512/…
  • 第二个 sn-p 可能会导致错误,因为 org.json.JSONObject 的内部结构与 JSON 的结构不同。

标签: java serialization jackson deserialization json-deserialization


【解决方案1】:

我将尝试解释我遇到的问题的区别。我在需要使用的复杂转换中都使用了。

我的请求格式如下。

"{Key=a1, type=ABC}"

我想将它转换为某个类的 (A1) 实例。

class A1 {
   private String key;
   private String type;
}

很明显,键不是字符串(即不包含在双引号中)

使用 mapper.readValue

我会得到如下错误:

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('k' (code 115)): was expecting double-quote to start field name

使用 mapper.convertValue

我会根据需要得到一个 A1 的实例。

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 2021-05-29
    • 2019-09-17
    • 2021-01-19
    • 1970-01-01
    • 2023-03-11
    • 2013-01-01
    • 2016-12-11
    相关资源
    最近更新 更多