gpt4 book ai didi

java - Jackson 反序列化 convertValue 与 readValue

转载 作者:行者123 更新时间:2023-12-04 04:27:57 25 4
gpt4 key购买 nike

我有一个包含 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 的情况下,它将为每次调用完成。

想法?

谢谢!

最佳答案

我将尝试用我面临的问题来解释差异。我在需要使用的复杂转换中使用了两者。
我的请求格式如下。

"{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 的实例。

关于java - Jackson 反序列化 convertValue 与 readValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com