FastJson 处理泛型

阿里的 FastJson 一直都很好用,在进行对象转换映射上处理起来非常简单。但今天我才发现我一直都是在瞎用。

之前解析Map的方式是这样的:

Map map = JSON.parseObject("{'name':'zhangsan','address':'hangzhou'}", Map.class);

这样得到的 Map 是没有泛型信息的,FastJson 在无法判断的情况下默认处理为了 Map<String,Object>的格式,我们在实际使用时还需要再做一下转换。

这时我们可以通过类型参数的方式将泛型信息传入进去,这样FastJ 就能根据我们提供的泛型类型进行转换了。

String str = "{'name':'zhangsan','address':'hangzhou'}";
# 注意这里新建了一个内部类,区别在于最后有一对大括号
Map map = JSON.parseObject(str, new TypeReference<Map<String,String>>(){});

在这里插入图片描述
知道这个技巧后,就能够偷很多懒了,比如这样处理:

String str = "{'name': [1,2,3,4,5]}";
Map<String, List<Integer>> map = JSON.parseObject(str, new TypeReference<Map<String, List<Integer>>>() {});

或者由输入参数指定类型:

public static <T> void main(Class<T> clz) {
    String str = "{'name': [1,2,3,4,5]}";
    T instance = JSON.parseObject(str, new TypeReference<T>() {});
}

官方给出的示例是这样的:

String json = "[{},...]";
Type listType = new TypeReference<List<Model>>(){}.getType();
List<Model> modelList = JSON.parseObject(json, listType);

当然,这些只是一些皮毛,如何应用还看你怎么设计了。

参考资料

FastJson解析多级泛型
fastjson使用泛型转换对象
fastJson反序列化处理泛型

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值