JSON工具之Jackson的使用详解

jackson。1、Jackson的使用Jackson 是当前用得比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的

JSON工具之Jackson的使用详解

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

@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” })

public class Person

@JsonCreator

用于构造方法,和 @JsonProperty 配合使用,适用有参数的构造方法。 示例:

@JsonCreator

public Person(@JsonProperty(“name”)String name) {…}

@JsonAnySetter

用于属性或者方法,设置未反序列化的属性名和值作为键值存储到 map 中

@JsonAnySetter

public void set(String key, Object value) {

map.put(key, value);

}

@JsonAnyGetter

用于方法 ,获取所有未序列化的属性

public Map any() { return map; }

1.2Jackson的简单应用

添加pom.xml配置信息:

com.fasterxml.jackson.core

jackson-core

2.9.9

com.fasterxml.jackson.core

jackson-databind

2.9.9

com.fasterxml.jackson.core

jackson-annotations

2.9.9

创建UserInfo(用户信息实体类),用户JSON序列化示例使用。

示例要求:

(1)使用@JsonIgnore注解,序列化时忽略登录密码字段。

(2)使用@JsonProperty注解,将blogRemark字段序列化时转换为blog-remark。

(3)使用@JsonFormat注解,序列化时将日期格式化。

package com.demo.utils.entity;

import com.fasterxml.jackson.annotation.JsonFormat;

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.Data;

import java.util.Date;

/**

* 用户信息实体类

* @author luoxiang

* @date 2022年01月13日 10:04 上午

*/

@Data

public class UserInfo

{

/**

* 用户名称

*/

private String userName;

/**

* 登录密码

* 使用@JsonIgnore注解

* JSON序列化时将忽略该字段

*/

@JsonIgnore

private String password;

/**

* 博客地址

*/

private String blogUrl;

/**

* 博客信息

* 使用@JsonProperty注解

* 把属性的名称序列化时转换为另外一个名称

*/

@JsonProperty(“blog-remark”)

private String blogRemark;

/**

* 创建时间

* 使用@JsonFormat注解

* 把属性的格式序列化时转换成指定的格式

*/

@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)

private Date createDate;

}

1.2.1 将实体类转换为JSON

/**

* 将实体类转换为JSON

* @author luoxiang

*/

@Test

public void entityToJson() throws Exception {

//用户信息实体类

UserInfo userInfo = new UserInfo();

userInfo.setUserName(“uncle_xiang的博客”);

userInfo.setPassword(“123456”);

userInfo.setBlogUrl(“https://blog.csdn.net/uncle_xiang”);

userInfo.setBlogRemark(“您好,欢迎访问 uncle_xiang的博客”);

userInfo.setCreateDate(new Date());

//将参数转换成JSON对象

ObjectMapper mapper = new ObjectMapper();

String json = mapper.writeValueAsString(userInfo);

//打印结果

System.out.println(json);

}

执行结果:

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 getJsonToBean(String jsonData,Class 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 列表

*/

public static List getJsonToList(String jsonData, Class 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

* @return Set集合

*/

public static Set getJsonToSet(String jsonData, Class 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 Map集合

*/

public static Map getJsonToMap(String jsonData, Class keyType, Class 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 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 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 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 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”));

}

执行结果:

声明:该文观点仅代表作者本人,《家在公租房生活网》系信息发布平台,家在公租房生活网仅提供信息存储空间服务。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫

相关推荐

  • 在无锡有没有口碑比较好,技术好的摄影楼给推荐一两个

    一、在无锡有没有口碑比较好,技术好的摄影楼给推荐一两个我姑姑在拍摄婚纱照的时候,我曾在网上浏览过无锡澜映像和无锡爱摄影,我觉的这两家在网上的评价都还是可以的,他们最后选择的是澜映像婚纱摄影,拍完后,我听我姑姑说他们家的服务态度还是挺可以的,价钱也还是合理。二、无锡摄影工作室哪个好?无锡798摄

    2023年10月5日
    00
  • 靠怜悯心得到爱情的星座男(12星座爱情配对大全)

    靠怜悯心得到爱情的星座男,第一名:双鱼座哪怕是很小的生活经历,也能在双鱼男的脑海里形成商业大片,然后向女人哭诉自己的经历有多不公平。双鱼男喜欢在女人面前扮演一个需要保护的角色。在人际关系上,他显然是一个非常聪明的人。但是给女人的感觉是他很孤独,需要一个红颜知己。即使是有女朋友的双鱼男,也不会放弃把这

    百科 2023年11月13日
    00
  • 代沟的意思解释(代沟究竟是什么意思?)

    代沟的意思解释。小的时候,我们总能听到长辈笑谈:“咱们和孩子们之间有代沟啦。”那么,代沟是什么意思?代沟是每一个年龄层次的人对于世界的认知不同的产物,在一起交流时候看待问题的角度不同。代沟总是会给人一种距离感,我们生活中最直观的代沟就是年龄的差距,所带来的代沟。因为年龄所给我们带来的是阅历的不同,经

    百科 2023年7月13日
    00
  • 电压力锅主板怎么换_电压力锅主板维修方法详解

    大家好,今天小编关注到一个比较有意思的话题,就是关于电压力锅换电脑主板的问题,于是小编就整理了4个相关介绍电压力锅换电脑主板的解答,让我们一起看看吧。1、电压力锅主板怎么换?2、电压力锅主板维修方法详解?3、电压力锅更换万能主板后怎么调压?4、电压力锅主板怎样识别型号?电压力锅主板怎么换?1.在要拆

    2024年2月11日
    00
  • 狐狸和乌鸦的故事原文(狐狸和乌鸦

    狐狸和乌鸦的故事。乌鸦在大树上做了个窝。大树底下有个洞,洞里住着狐狸。有一天,乌鸦飞出去给她的孩子找吃的。她找到一片肉,叼了回来,站在窝旁边的树枝上,心里很高兴。狐狸和乌鸦这时候,狐狸也出来找吃的。他抬起头一看,乌鸦嘴里叼着一片肉,馋的直流口水。狐狸想了想,就笑着对乌鸦说:“您好,亲爱的乌鸦!”乌鸦

    2023年11月12日
    00
  • 最新家居装饰品图片大全大图

    最新家居装饰品图片大全大图家居装饰品是让我们的家变得更加美丽、温馨的重要元素之一。无论是在起居室、卧室、厨房还是客厅,精心挑选的装饰品能够为家里增添独特的氛围和个性化的风格。今天,我将给大家分享一些最新家居装饰品的图片,希望能够给你带来灵感和创意。1. 壁画壁画是一种能够瞬间改变整个房间氛围的装饰品

    2023年9月14日
    00

发表回复

登录后才能评论
关注微信

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:296358331@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息