jackson的objectMapper反序列化复杂对象TypeReference

objectMapper.readValue的三个重载方法

//简单型,就是 直接  UserBase.class 就可。
public <T> T readValue(String content, Class<T> valueType);

//valueTypeRef);复杂的可以 用这个
public <T> T readValue(String content, TypeReference<T> 
//这个书写起来比较麻烦,就不说明了,不常用,前2个已经彻底满足了。

public <T> T readValue(String content, JavaType valueType);

demo

包名com.fasterxml.jackson.core.type.TypeReference

ObjectMapper objectMapper = new ObjectMapper();
String json1 = "{\"userName\":\"小李飞刀\",\"age\":18,\"addTime\":1591851786568}";
String json2 = "[{\"userName\":\"小李飞刀\",\"age\":18,\"addTime\":123}, {\"userName\":\"小李飞刀2\",\"age\":182,\"addTime\":1234}]";


//1.最简单的常用方法,直接将一个json转换成实体类
UserBase userBase1 = objectMapper.readValue(json1, UserBase.class); //简单类型的时候,这样最方便
System.out.println("简单: " + userBase1.getUserName());
//用 TypeReference 也可以,但是麻烦 不如第一种直接 TypeReference 主要针对繁杂类型
//UserBase userBase2 = objectMapper.readValue(json1, new TypeReference<UserBase>() {});



//2.把Json转换成map,必须使用 TypeReference , map的类型定义 可以根据实际情况来定,比如若值都是String那么就可以 Map<String, String>
Map<String, Object> userBaseMap =  objectMapper.readValue(json1, new TypeReference<Map<String, Object>>() {});
System.out.println("map: " + userBaseMap.get("userName"));


//3.list<Bean>模式,必须用 TypeReference
List<UserBase> userBaseList = objectMapper.readValue(json2, new TypeReference<List<UserBase>>() {});
System.out.println("list: " + userBaseList.get(0).getUserName());


//4.Bean[] 数组,必须用 TypeReference
UserBase[] userBaseAry = objectMapper.readValue(json2, new TypeReference<UserBase[]>() {});
System.out.println("ary: " + userBaseAry[0].getUserName());
LinkList是Java中的链表数据结构,它的特点是每个节点中都包含指向下一个节点的引用。Hash Map是Java中的散列表数据结构,它通过将键映射到值的方式来存储和访问元素。ObjectMapperJackson库中的一个类,用于将JSON数据反序列化为Java对象。 当需要将JSON数据反序列化为LinkList或Hash Map对象时,可以使用ObjectMapper类的readValue方法。该方法接受两个参数,第一个参数是要反序列化的JSON数据,第二个参数是要生成的目标对象类型。例如,以下是将JSON数据反序列化为LinkList对象的示例代码: ``` String json = "[1, 2, 3]"; ObjectMapper objectMapper = new ObjectMapper(); LinkList<Integer> list = objectMapper.readValue(json, new TypeReference<LinkList<Integer>>(){}); ``` 在上面的代码中,json变量表示要反序列化的JSON数据。然后,我们创建了一个ObjectMapper对象,并使用其readValue方法来将json反序列化为LinkList<Integer>对象。由于泛型在运行时会被擦除,因此我们需要使用TypeReference类来指定反序列化的目标类型。 同样地,我们也可以将JSON数据反序列化为Hash Map对象。以下是示例代码: ``` String json = "{\"key1\":\"value1\", \"key2\":\"value2\"}"; ObjectMapper objectMapper = new ObjectMapper(); Hash Map<String, String> map = objectMapper.readValue(json, new TypeReference<Hash Map<String, String>>(){}); ``` 在上面的代码中,json变量表示要反序列化的JSON数据。然后,我们创建了一个ObjectMapper对象,并使用其readValue方法将json反序列化为Hash Map<String, String>对象。 总结来说,通过使用ObjectMapper类的readValue方法,我们可以将JSON数据反序列化为LinkList或Hash Map对象,从而方便地进行后续的操作和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值