您的位置 首页 java

全网最全Jackson教程,操作Json节省一半时间

全网最全Jackson教程,操作Json节省一半时间

前言

目前解析 JSON 的工具包有,Gson,FastJson,Jackson,Json-lib。综合来看,Jackson的性能较优,稳定性也比较高,而且spring-boot-starter-web默认会引入Jackson包。因此介绍一下Jackson的使用。

Jackson目前有2个版本

1.x版本包名为org.codehaus.jackson

2.x版本包名为com.fasterxml.jackson

使用

pom 中加入如下依赖即可。

<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-core</artifactId>
 <version>2.9.2</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.9.2</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-annotations</artifactId>
 <version>2.9.2</version>
</dependency>
 

前文说过,当使用spring-boot-starter-web模块时,会默认引入Jackson包,不必在pom中再次引入上面依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 

序列化

将java对象序列化成json,@Data注解是用lombok插件来自动生成get和set方法

@Data
public class Student {
 /** 名字 */ private String name;
 /** 年龄 */ private Integer age;
 /** 头像 */ private String profileImageUrl;
}
 

将常用的方法封装成一个常用的工具类,如下所示,有2个好处

  1. ObjectMapper 类只会生成一个,节省空间
  2. 可以定义统一的配置(后面细说)
全网最全Jackson教程,操作Json节省一半时间

先简单介绍一下封装的工具类

全网最全Jackson教程,操作Json节省一半时间

1. 将对象转为json

全网最全Jackson教程,操作Json节省一半时间

各种类型均可

全网最全Jackson教程,操作Json节省一半时间

2. 将对象转为json,并格式化的输出

全网最全Jackson教程,操作Json节省一半时间


全网最全Jackson教程,操作Json节省一半时间

反序列化

将json转为java对象

方式1

全网最全Jackson教程,操作Json节省一半时间

基本类型的转换

全网最全Jackson教程,操作Json节省一半时间

各种复杂类型的转换,示例1

全网最全Jackson教程,操作Json节省一半时间

复杂类型的转换,示例2

全网最全Jackson教程,操作Json节省一半时间

到现在为止,你可以用这3个函数进行序列化和反序列化操作

全网最全Jackson教程,操作Json节省一半时间

可能你还看过其他类型的解析方式,如下所示,但是没有必要,上面3个函数完全能满足你的需求,我这里演示一下

方式2

全网最全Jackson教程,操作Json节省一半时间

方式3

全网最全Jackson教程,操作Json节省一半时间

常用注解及配置

@JsonIgnore忽略属性

@Data
public class Student {
 /** 名字 */ private String name;
 /** 年龄 */ private Integer age;
 /** 头像 */ @JsonIgnore
 private String profileImageUrl;
}
 
全网最全Jackson教程,操作Json节省一半时间

@JsonProperty

当Json的属性值和Java的属性值不一样时,会映射失败,用这个注解指定映射关系,在属性上用这个注解,则序列化和反序列化都会用这个值。如果序列化和反序列化的属性不一致,可以在get方法或者set方法上用这个注解,set方法影响反序列化,get方法影响序列化。

去掉@Data注解

全网最全Jackson教程,操作Json节省一半时间

全网最全Jackson教程,操作Json节省一半时间

@JsonFormat

日期格式化注解,不再演示

@JsonIgnoreProperties(ignoreUnknown = true)

如果json 字符串 中的属性个数小于java对象中的属性个数,可以顺利转换,java中多的那个属性为null

如果json字符串中出现java对象中没有的属性,则在将json转换为java对象时会报错:Unrecognized field, not marked as ignorable

解决方法1:

在目标对象的类级别上添加注解:@JsonIgnoreProperties(ignoreUnknown = true)

解决方法2:

全网最全Jackson教程,操作Json节省一半时间

这样就不用在目标类上加@JsonIgnoreProperties属性了,体现了全局配置的优势,配置项很多,包括格式化显示日期等,不再详细介绍,百度配置即可

用Tree Mode方式解析JSON

除了将json转为对象外,还可以用Tree Mode方式解析JSON,全程无脑操作,除了一些特别复杂的JSON,或者只取JSON中的一部分,千万不要用这种二B方式解析JSON。正确的方式是将JSON直接转为对象。我这里演示一下解析的方式

全网最全Jackson教程,操作Json节省一半时间


全网最全Jackson教程,操作Json节省一半时间

本文为小编原创文章,首发于 Java识堂 ,一个高原创,高收藏,有干货的 微信公众号, 一起成长,一起进步,欢迎关注

格式看着不舒服,看了解更多

文章来源:智云一二三科技

文章标题:全网最全Jackson教程,操作Json节省一半时间

文章地址:https://www.zhihuclub.com/185425.shtml

关于作者: 智云科技

热门文章

网站地图