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

32cdff5f4c0afbad5f919691f66a75a0.png

前言

目前解析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中加入如下依赖即可。

com.fasterxml.jackson.core jackson-core 2.9.2com.fasterxml.jackson.core jackson-databind 2.9.2com.fasterxml.jackson.core jackson-annotations 2.9.2

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

org.springframework.boot spring-boot-starter-web

序列化

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

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

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

  1. ObjectMapper 类只会生成一个,节省空间
  2. 可以定义统一的配置(后面细说)
349de093f5491be02db767275a0573b8.png

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

de0a337dbca8cc39efc8ed05dfcd2cae.png

1. 将对象转为json

6a83739baa68bcd5c5985776b6ca77ef.png

各种类型均可

458870ecd7bee851f7608f9b1994f0a9.png

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

44a3b7bcfe74fd1469928a8e5090e476.png

77e94a3eec66976e1bffa96c985bbdcb.png

反序列化

将json转为java对象

方式1

5ab449a2dc12129b72ba0eb09e1b7a5e.png

基本类型的转换

acdb8370bcadf091da563cc76741dbd7.png

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

9e71fc70d41f771cd7f91a26fad043e0.png

复杂类型的转换,示例2

b65fa8530b792d736092ce21040dcacb.png

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

d841e38362b8c13306e9b87752fc3be1.png

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

方式2

60d587d89d91fe207785865475780452.png

方式3

a3eac231bd82b18c794f802b2a04fc3e.png

常用注解及配置

@JsonIgnore忽略属性

@Datapublic class Student { /** 名字 */ private String name; /** 年龄 */ private Integer age; /** 头像 */ @JsonIgnore private String profileImageUrl;}
157c478bf26e228b38053774816005ef.png

@JsonProperty

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

去掉@Data注解

c20943c866ccd54bf2122ce38b115b1b.png
4fd60b9dda1b20099fa83fd35a145e5f.png

@JsonFormat

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

@JsonIgnoreProperties(ignoreUnknown = true)

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

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

解决方法1:

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

解决方法2:

ef3fc91a6ed4f7b7a3aa7f827d81fd5c.png

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

用Tree Mode方式解析JSON

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

2cfe3c342eb792cab1aa162b80cf637a.png

09f47d7bc85665339340edec87990668.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值