如何将Map<String,Object>反序列化为POJO?

2022-09-01 16:37:31

我有一个Map<String,Object>其中包含JSON的反序列化形式。我想将其反序列化为POJO的领域。

我可以使用Gson将Map序列化为JSON字符串,然后将JSON字符串反序列化为POJO来执行此操作,但这效率低下(请参阅下面的示例)。如何在没有中间步骤的情况下执行此操作?

解决方案最好使用Gson或Jackson,因为它们已经被项目使用。

示例代码:

import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;

public class Test {
    public static void main(String[] args) {
        Map<String, Object> innermap = new HashMap<String, Object>();
        innermap.put("number", 234);
        innermap.put("string", "bar");
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("number", 123);
        map.put("string", "foo");
        map.put("pojo2", innermap);

        Gson gson = new Gson();

        // How to perform this without JSON serialization?
        String json = gson.toJson(map);
        MyPojo pojo = gson.fromJson(json, MyPojo.class);

        System.out.println(pojo);
    }
}


class MyPojo {
    private int number;
    private String string;
    private MyPojo pojo2;

    @Override
    public String toString() {
        return "MyPojo[number=" + number + ", string=" + string + ", pojo2=" + pojo2 + "]";
    }
}

答案 1

使用Gson,您可以将Map转换为,然后可以使用以下方法以完全相同的方式解析:JsonElementfromJson

JsonElement jsonElement = gson.toJsonTree(map);
MyPojo pojo = gson.fromJson(jsonElement, MyPojo.class);

这类似于您已经在使用的方法,不同之处在于它避免编写 JSON 字符串表示形式,然后在将其转换为类之前将该 JSON 字符串解析回 JsonElement。toJson


答案 2

在您可以使用转换值方法。请参阅以下示例:Jackson

mapper.convertValue(map, MyPojo.class);