1.maven依赖(2.9.8)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
2.工具类(object/list/map与json相互转换)
public final class JsonUtils {
private JsonUtils() {}
private final static ObjectMapper MAPPER;
static {
MAPPER = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
public static String getJsonByObject(Object obj) {
try {
return MAPPER.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static <T> T getObjectByJson(String jsonText, Class<T> beanClass) {
try {
return MAPPER.readValue(jsonText, beanClass);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Object getListByJson(String jsonText, Class collectionClass, Class beanClass) {
try {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(collectionClass, beanClass);
return MAPPER.readValue(jsonText, javaType);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Object getMapByJson(String jsonText, Class collectionClass, Class keyClass, Class valueClass) {
try {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(collectionClass, keyClass, valueClass);
return MAPPER.readValue(jsonText, javaType);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
3.测试
public static void main(String[] args) {
Person person = new Person();
person.setAge(11);
person.setUsername("tom");
String personJson = JsonUtils.getJsonByObject(person);
System.out.println(personJson);
Person newPerson = JsonUtils.getObjectByJson(personJson, Person.class);
System.out.println(newPerson);
System.out.println();
Person person2 = new Person();
person2.setAge(11);
person2.setUsername("tom");
List<Person> personList = new ArrayList<>();
personList.add(person);
personList.add(person2);
String personListJson = JsonUtils.getJsonByObject(personList);
System.out.println(personListJson);
List<Person> newPersonList = (List<Person>) JsonUtils.getListByJson(personListJson, List.class, Person.class);
System.out.println(newPersonList);
System.out.println();
Map<String, Person> personMap = new HashMap<>();
personMap.put("person1", person);
personMap.put("person2", person2);
String mapJson = JsonUtils.getJsonByObject(personMap);
System.out.println(mapJson);
Map<String, Person> newPersonMap = (Map<String, Person>) JsonUtils.getMapByJson(mapJson, Map.class, String.class, Person.class);
System.out.println(newPersonMap);
System.out.println();
}
输出:
{"username":"tom","age":11}
Person{username='tom', age=11}
[{"username":"tom","age":11},{"username":"tom","age":11}]
[Person{username='tom', age=11}, Person{username='tom', age=11}]
{"person2":{"username":"tom","age":11},"person1":{"username":"tom","age":11}}
{person2=Person{username='tom', age=11}, person1=Person{username='tom', age=11}}
4.补充
@JsonIgnore 此注解用于属性上 作用是进行JSON操作时忽略该属性
@JsonFormat 此注解用于属性上 作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
@JsonProperty 此注解用于属性上 作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name @JsonProperty("name")