jackson数据结构图(JSON工具之Jackson的使用详解)

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序列化时将忽略该字段。示例:

@JsonIgnoreprivate 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()); }

执行结果:

jackson数据结构图(JSON工具之Jackson的使用详解)(1)

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); } }

执行结果:

jackson数据结构图(JSON工具之Jackson的使用详解)(2)

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")); }

执行结果:

jackson数据结构图(JSON工具之Jackson的使用详解)(3)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com