快捷搜索:  汽车  科技

jackson读取json文档(JSON工具之Jackson的使用详解)

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

执行结果:

jackson读取json文档(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文档(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文档(JSON工具之Jackson的使用详解)(3)

猜您喜欢: