有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jackson反序列化convertValue与readValue

我有一个组织。json。包含JSONObject的JSONArray,我正在尝试将它们映射到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的情况下,每次调用都会创建一次

想法

谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    我的请求格式如下

    "{Key=a1, type=ABC}"
    

    我想把它转换成某个类的(A1)实例

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

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

    使用映射器。readValue

    我将得到如下错误:

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

    使用映射器。转换值

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