jackson读取json文档(JSON工具之Jackson的使用详解)@JsonProperty("blog-remark")用于属性,把属性的名称序列化时转换为另外一个名称。示例:使用@JsonIgnore注解JSON序列化时将忽略该字段。示例:@JsonIgnoreprivate String password;@JsonProperty
1、Jackson的使用
Jackson 是当前用得比较广泛的,用来序列化和反序列化 JSON 的 Java 的开源框架。Jackson 社区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 ,简单易用。与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快;Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。
1.1Jackson的常用注解
注解 |
说明 |
@JsonIgnore |
使用@JsonIgnore注解JSON序列化时将忽略该字段。示例:
@JsonIgnore private String password; |
@JsonProperty |
用于属性,把属性的名称序列化时转换为另外一个名称。示例:
@JsonProperty("blog-remark")
private String blogRemark; |
@JsonFormat |
用于属性或者方法,把属性的格式序列化时转换成指定的格式。示例:
@JsonFormat(timezone = "GMT 8" pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; |
@JsonPropertyOrder |
用于类, 指定属性在序列化时 json 中的顺序 , 示例: @JsonPropertyOrder({ "birth_Date" "name" }) 1.2.2 将JSON转换为实体类
/**
* 将JSON转换为实体类
* @author luoxiang
*/
@Test
public void jsonToEntity() throws Exception {
//JSON内容
String json = "{\"userName\":\"uncle_xiang的博客\" \"blogUrl\":\"https://blog.csdn.net/uncle_xiang\" \"createDate\":\"2022-01-13 10:07:55\" \"blog-remark\":\"您好,欢迎访问 uncle_xiang的博客\"}";
//将JSON转换为实体类
ObjectMapper mapper = new ObjectMapper();
UserInfo userInfo = mapper.readValue(json UserInfo.class);
//打印结果
System.out.println("用户名称:" userInfo.getUserName());
System.out.println("登录密码:" userInfo.getPassword());
System.out.println("博客地址:" userInfo.getBlogUrl());
System.out.println("博客信息:" userInfo.getBlogRemark());
System.out.println("创建时间:" userInfo.getCreateDate());
}
执行结果:
 2、创建工具类
在项目中创建Jackson工具类(JacksonUtil.java)
package com.demo.utils.json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Jackson工具类
* @author luoxiang
* @date 2022年01月13日 10:13 上午
*/
public class JacksonUtil {
private static ObjectMapper mapper = new ObjectMapper();
/**
* 将对象转换成JSON数据
* @author luoxiang
* @date 2022/1/13 10:15 上午
* @param data data对象
* @return java.lang.String JSON数据
*/
public static String getBeanToJson(Object data){
try {
return mapper.writeValueAsString(data);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON数据转换成对象
* @author luoxiang
* @date 2022/1/13 10:17 上午
* @param jsonData JSON数据
* @param beanType 对象类型
* @return T 对象
*/
public static <T> T getJsonToBean(String jsonData Class<T> beanType){
try {
return mapper.readValue(jsonData beanType);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON数据转换成列表
* @author luoxiang
* @date 2022/1/13 10:21 上午
* @param jsonData JSON对象
* @param beanType 对象类型
* @return java.util.List<T> 列表
*/
public static <T> List<T> getJsonToList(String jsonData Class<T> beanType){
try {
JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class beanType);
return mapper.readValue(jsonData javaType);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON数据转换成Set集合
* @param jsonData JSON数据
* @param elementType 元素类型
* @param <E>
* @return Set集合
*/
public static <E> Set<E> getJsonToSet(String jsonData Class<E> elementType){
try {
JavaType javaType = mapper.getTypeFactory().constructCollectionType(Set.class elementType);
return mapper.readValue(jsonData javaType);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON数据转换成Map集合
* @author luoxiang
* @date 2022/1/13 10:28 上午
* @param jsonData JSON数据
* @param keyType 键类型
* @param valueType 值类型
* @return java.util.Map<K V> Map集合
*/
public static <K V> Map<K V> getJsonToMap(String jsonData Class<K> keyType Class<V> valueType){
try {
JavaType javaType = mapper.getTypeFactory().constructMapType(Map.class keyType valueType);
return mapper.readValue(jsonData javaType);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
} 1.1将JSON数据转换成set集合。
/**
* 将JSON数据转换成Set集合
* @author luoxiang
*/
@Test
public void setTest(){
Set<String> userSet = new HashSet<>();
userSet.add("uncle_xiang的博客");
userSet.add("您好,欢迎访问 uncle_xiang的博客");
userSet.add("https://blog.csdn.net/uncle_xiang");
//将Set转化为JSON数据
String json = JacksonUtil.getBeanToJson(userSet);
System.out.println(json "\n");
//将JSON数据转换成Set集合
Set<String> jsonToSet = JacksonUtil.getJsonToSet(json String.class);
for(String item : jsonToSet) {
System.out.println(item);
}
}
执行结果:
 2.2将JSON数据转换成Map集合。
/**
* 将JSON数据转换成Map集合
* @author luoxiang
*/
@Test
public void mapTest() {
Map<String String> userMap = new HashMap<>();
userMap.put("userName" "uncle_xiang的博客");
userMap.put("blogUrl" "https://blog.csdn.net/uncle_xiang");
userMap.put("blogRemark" "您好,欢迎访问 uncle_xiang的博客");
//将map转化为JSON数据
String json = JacksonUtil.getBeanToJson(userMap);
//将JSON数据转换成Map集合
Map<String String> jsonToMap = JacksonUtil.getJsonToMap(json String.class String.class);
System.out.println("用户名称:" jsonToMap.get("userName"));
System.out.println("博客地址:" jsonToMap.get("blogUrl"));
System.out.println("博客备注:" jsonToMap.get("blogRemark"));
}
执行结果:

|