我有一个包含org.json.JSONArray的JSONObjects,我试图将这些映射到POJO。我知道我想要映射到的POJO类型。我有两个选择,我正在努力找出哪一个在性能上更好。
备选案文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,则将对每个调用执行。
有什么想法?
谢谢!
发布于 2021-08-02 15:07:13
我将试着用我所面临的问题来解释差异。我在我需要使用的复杂转换中使用了这两种方法。
我的请求的格式如下。
"{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的一个实例。
https://stackoverflow.com/questions/21441827
复制相似问题