目录
注意:
1、 TypeReference所在包为 package com.fasterxml.jackson.core.type;
而之前我一直导入包 import com.alibaba.fastjson.TypeReference;或import org.assertj.core.internal.asm.TypeReference;
public abstract class TypeReference<T> implements Comparable<TypeReference<T>> {
protected final Type _type;
protected TypeReference() {
Type superClass = this.getClass().getGenericSuperclass();
if (superClass instanceof Class) {
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information");
} else {
this._type = ((ParameterizedType)superClass).getActualTypeArguments()[0];
}
}
public Type getType() {
return this._type;
}
public int compareTo(TypeReference<T> o) {
return 0;
}
}
2、ObjectMapper所在包为 import com.fasterxml.jackson.databind.ObjectMapper;
而之前我一直导入包 import org.codehaus.jackson.map.ObjectMapper;
ObjectMapper objectMapper = new ObjectMapper();
用法
1、定义一个实体
@Getter
@Setter
public class UserBase {
private String userName;
private int age;
private long addTime;
}
2、实现
注意包名
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
package test.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class test2222 {
private static final String TRUE = "true";
public static void main(String[] args) throws JsonProcessingException {
String json1 = "{\"userName\":\"小李飞刀\",\"age\":18,\"addTime\":1591851786568}";
/**
* 1、将jsonString转为map的四种方式
* Map.class
* 实体类.class
* new TypeReference<实体类>(){}
* new TypeReference<Map<String,Object>>(){}
**/
//不建议这种方式,没有明确知名Map具体类型。maven package打包时会有警告。
//Map.class没有彻底清楚说明类型,默认成Map<Object, Object>
Map map = objectMapper.readValue(json1, Map.class);
System.out.println(map.get("userName"));
UserBase userBase = objectMapper.readValue(json1, UserBase.class);
System.out.println(userBase.getAddTime());
UserBase userBase1 = objectMapper.readValue(json1, new TypeReference<UserBase>(){});
System.out.println(userBase1.getAge());
Map userBaseMap = objectMapper.readValue(json1, new TypeReference<Map<String,Object>>(){});
System.out.println(userBaseMap.get("userName"));
/**
* 2、将jsonString转为List<Map>的四种方式
* new TypeReference<List<Map<String, Object>>>(){}
* new TypeReference<List<实体类>(){}
* new TypeReference<实体类[]>(){}
* List.class
**/
String json2 = "[{\"userName\":\"小李飞刀\",\"age\":18,\"addTime\":123}, {\"userName\":\"小李飞刀2\",\"age\":182,\"addTime\":1234}]";
List listMap = objectMapper.readValue(json2, new TypeReference<List<Map<String, Object>>>(){});
for(Object map1 : listMap){
Map map2 = (Map)map1;
System.out.println(map2.get("userName"));
}
List listBean = objectMapper.readValue(json2, new TypeReference<List<UserBase>>(){});
for(Object userBase2 : listBean){
UserBase userBase3 = (UserBase)userBase2;
System.out.println(userBase3.getAge());
}
UserBase[] userBaseAry = objectMapper.readValue(json2, new TypeReference<UserBase[]>(){});
System.out.println("ary: " + userBaseAry[0].getUserName());
List list2 = objectMapper.readValue(json2, List.class);
System.out.println(list2.get(0));
}
}