1.使用jackson
ObjectMapper mapper = new ObjectMapper();
A<B<C>> resultObj = mapper.readValue("转换json",new TypeReference<A<B<C>>>(){});
A为接收类型,B为A的泛型类,C为B的泛型类
2.使用fastjson
A<B<C>> resultObj =JSON.parseObject("转换json",new TypeReference<A<B<C>>>(){});
*A为接收类型,B为A的泛型类,C为B的泛型类
泛型转换:
jackson;
public static<T> DataBase<T> parseJson(String json,Class<T> type){
DataBase<T> dataBase = null;
try{
JavaType javaType = TypeFactory.defaultInstance().constructParametricType(DataBase.class,type);
//或 JavaType javaType = objectMapper.getTypeFactory().constructParametricType(DataBase.class, type);
dataBase = objectMapper.readValue(json,javaType);
} catch(Exception e){
e.printStackTrace();
}
return dataBase;
}
fastjson:
public static <T> T convertToBean(String jsonStr, Type[] actualArguments, Type rawType) {
Type type = new ParameterizedTypeImpl(actualArguments, null, rawType);
return JSON.parseObject(jsonStr, type);
}
// 转换成List<String>
String listJsonData2 = "[{\"sname\":\"张三\",\"sage\":10,\"sid\":\"1\"},{\"sname\":\"李四\",\"sage\":20,\"sid\":\"2\"}]";
List<Student> list2 = FastJsonUtil.convertToBean(listJsonData2, new Type[]{Student.class}, List.class);
System.out.println(list2);
// 转为map
// 写法一:
String mapJsonData = "{\"1\":{\"sname\":\"张三\",\"sage\":10,\"sid\":\"1\"},\"2\":{\"sname\":\"李四\",\"sage\":20,\"sid\":\"2\"}}";
Map<Integer, Student> map = FastJsonUtil.convertToBean(mapJsonData, new Type[]{Integer.class, Student.class}, Map.class);
System.out.println(map);
// 写法二:(可以稍微作下封装)
Map<Integer, Student> map2 = JSON.parseObject(mapJsonData, new HashMap<Integer, Student>(){}.getClass().getGenericSuperclass());
System.out.println(map2);