JSON 转换为泛型类型丢失问题

问题

当我们用 fastjson 如下 API 转成 List<T> 这种类型时,会遇到类型丢失的问题

com.alibaba.fastjson.JSON#parseObject(java.lang.String, java.lang.Class<T>)

解决方案

String testJSON = "[{\"type\":\"a\"},{\"type\":\"b\"}]";
List<Button> buttons = JSON.parseObject(testJSON, new TypeReference<ArrayList<Button>>() {});

或者还有一种更通用的转换方式

List<Button> buttons = JSON.parseArray(testJSON, Button.class);

更多

同理,这种同样可以解决 Map 的问题

String testMapJSON = "{\"1\":{\"type\":\"a\"},\"2\":{\"type\":\"b\"}}";
Map<String, Button> buttonMap = JSON.parseObject(testMapJSON, new TypeReference<HashMap<String, Button>>() {});

如果是嵌套层次中属性有接口或父类型的,JSON 实际类型需要额外 @type 属性来指定当前类型,并且要放到 JSON 类字符串的第一行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。