FastJson 处理泛型

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

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

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

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

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

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

FastJson 处理泛型_第1张图片
知道这个技巧后,就能够偷很多懒了,比如这样处理:

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反序列化处理泛型

你可能感兴趣的:(java,json,开发语言)