我有一个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 + "]";
}
}
4条答案
按热度按时间mbzjlibv1#
使用Gson,可以将Map转换为
JsonElement
,然后可以使用fromJson
以完全相同的方式解析它:这类似于您已经使用的
toJson
方法,不同之处在于它避免了编写JSON String表示形式,然后在将JSON String转换为类之前将其解析回JsonElement。uqcuzwp82#
在
Jackson
中,您可以使用convertValue方法。请参阅以下示例:3lxsmp7m3#
您可以使用Jackson库将Map对象转换为直接的POJO。
7tofc5zh4#
你可以通过给它Map来直接构建MyPojo。
并声明相应的构造函数: