首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >杰克逊反序列化convertValue与readValue

杰克逊反序列化convertValue与readValue
EN

Stack Overflow用户
提问于 2014-01-29 20:22:07
回答 1查看 18.5K关注 0票数 12

我有一个包含org.json.JSONArray的JSONObjects,我试图将这些映射到POJO。我知道我想要映射到的POJO类型。我有两个选择,我正在努力找出哪一个在性能上更好。

备选案文1:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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,则将对每个调用执行。

有什么想法?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-08-02 15:07:13

我将试着用我所面临的问题来解释差异。我在我需要使用的复杂转换中使用了这两种方法。

我的请求的格式如下。

代码语言:javascript
运行
复制
"{Key=a1, type=ABC}"

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

代码语言:javascript
运行
复制
class A1 {
   private String key;
   private String type;
}

很明显,键不是字符串(即不是用双引号括起来的)。

与mapper.readValue

我将得到以下错误:

代码语言:javascript
运行
复制
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('k' (code 115)): was expecting double-quote to start field name

与mapper.convertValue

我将根据需要获得A1的一个实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21441827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档