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

文章目录

          • 需求
      • 使用 `TypeReference`
      • 猜一下
      • 资料

需求

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

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

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

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


使用 TypeReference


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

// 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), 但因为有泛型擦除,运行时不能知道,
那么需要一个对象将其记录下来。

所以 TypeReference 有个成员变量 Type

protected final Type type;

资料


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

你可能感兴趣的:(【JavaWeb】,【Java】)