alibaba JSON TypeReference 复杂类型转换

1. 基础使用

在fastjson中提供了一个用于处理泛型反序列化的类TypeReference。

import com.alibaba.fastjson.TypeReference;

List list = JSON.parseObject("...", new TypeReference>() {});

如下写法有更好的性能

import com.alibaba.fastjson.TypeReference;

final static Type type = new TypeReference>() {}.getType();

List list = JSON.parseObject("...", type);

在这里例子中,通过TypeReference能够解决List中T的类型问题。

2. 带参数使用

在1.2.9 & 1.1.49.android版本中,TypeReference支持泛型参数,方便一些框架实现通用的反序列化类。用法如下:

2.1. 单参数例子

public class Response {
     public T data;
}
public static  Response parseToMap(String json, Class type) {
     return JSON.parseObject(json, 
                            new TypeReference>(type) {});
}

2.2. 双参数例子

public static  Map parseToMap(String json, 
                                            Class keyType, 
                                            Class valueType) {
     return JSON.parseObject(json, 
                            new TypeReference>(keyType, valueType) {
                            });
}

// 可以这样使用
String json = "{1:{name:\"ddd\"},2:{name:\"zzz\"}}";
Map map = parseToMap(json, Integer.class, Model.class);
assertEquals("ddd", map.get(1).name);
assertEquals("zzz", map.get(2).name);

from:https://github.com/alibaba/fastjson/wiki/TypeReference

你可能感兴趣的:(Java,Web)