JSON泛型反序列化, 多层嵌套,使用 TypeReference

需求

解析JSON, 并将其转换为对应的数据结构。
例如:转换为 Map<String, Object>

若直接转换,会如何?
比如:
JSONObject.parseObject(response.getResponseJson, Map.class)

虽然也可以,但若ResponseJson里的格式并不与所期望的匹配,这时候也会转换。

那么使用方使用这个时候,就会报错。


使用 TypeReference


TypeReference可以正确反序列化嵌套多层的List或Map,例如List<Map<String,String>>

// 1. 例如可以直接使用
TreeMap<String, EnergyData> map = JSONObject.parseObject(response.getResponseJson(), 
                         new TypeReference<TreeMap<String, EnergyData>>(){});
                         

// 2. 继承一下

private class EnergyDataType extends TypeReference<TreeMap<String, EnergyData>> { }

TreeMap<String, EnergyData> map = JSONObject.parseObject(response.getResponseJson(), new EnergyDataType());

猜一下


为什么需要这个呢?

反序列化时候想知道一个特定的数据类型(Map<String, EnergyData>), 但因为有泛型擦除,运行时不能知道,
那么需要一个对象将其记录下来。

所以 TypeReference 有个成员变量 Type

protected final Type type;

资料


https://www.jianshu.com/p/0dc13273e931
https://github.com/alibaba/fastjson/issues/979

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值