前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【json】Jackson的使用

【json】Jackson的使用

作者头像
全栈程序员站长
发布2022-07-21 13:07:15
5590
发布2022-07-21 13:07:15
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

Jackson所有的操作都是通过ObjectMapper对象实例来操作的,可以重用这个对象实例。

首先定义一个实例: ObjectMapper mapper = new ObjectMapper();

定义一个Student类:

代码语言:javascript
复制
 package jackson; import java.util.Date; public class Student { private String name; private int age; private String position; private Date createTime; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", position=" + position + ", createTime=" + createTime + "]"; } }

准备一个字符串: String jsonString = "{\"name\":\"king\",\"age\":21}";

常规操作: 字符串转对象
代码语言:javascript
复制
 mapper.readValue(jsonString,Student.class); System.out.println(student);

打印输出结果:

代码语言:javascript
复制
Student [name=king, age=21, position=null, createTime=null]
常规操作: 对象转字符串
代码语言:javascript
复制
 student.setCreateTime(new Date()); String json = mapper.writeValueAsString(student); System.out.println(json);

打印输出结果:

代码语言:javascript
复制
{"name":"king","age":21,"position":null,"createTime":1524819355361}
如何改变输出的日期字段格式?

两种方式:一种SimpleDateFormat,另外一种通过在属性字段注解 在Student.java属性字段createTime注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

代码语言:javascript
复制
 import com.fasterxml.jackson.annotation.JsonFormat; public class Student { private String name; private int age; private String position; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; //省略get,set } 

打印输出结果:

代码语言:javascript
复制
{"name":"king","age":21,"position":null,"createTime":"2018-04-27 09:00:56"}
8小时时间差问题:上面打印结果发现,时间少8小时。
解决方法: 注解上增加时区。
代码语言:javascript
复制
public class Student { private String name; private int age; private String position; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; //省略get,set }

打印输出结果:

代码语言:javascript
复制
{"name":"king","age":21,"position":null,"createTime":"2018-04-27 17:07:33"}
其他的一些奇怪的配置

输出格式化,就是分行显示,该功能:java mapper.configure(SerializationFeature.INDENT_OUTPUT, true); 打印输出样式{ "name" : "king", "age" : 21, "position" : null, "createTime" : "2018-04-27 17:29:01" }

3.其他注解 @JsonIgnore 用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。 @JsonIgnoreProperties(ignoreUnknown = true) 将这个注解写在类上之后,就会忽略类中不存在的字段 @JsonIgnoreProperties({ "internalId", "secretKey" }) 将这个注解写在类上之后,指定的字段不会被序列化和反序列化。

代码语言:javascript
复制
`objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);` ***添加这个配置后,输出时自动将类名作为根元素。***

````输出如下:
`{"Student":{"name":"king","age":21,"position":null,"createTime":"2018-05-02 10:06:29"}}`
````

 `@JsonRootName("myPojo")` ***将这个注解写在类上之后,根据指定的值生成根元素,作用类似于上面***

(博客园的这个markdown编辑器真不会用)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/107556.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jackson所有的操作都是通过ObjectMapper对象实例来操作的,可以重用这个对象实例。
  • 常规操作: 字符串转对象
  • 常规操作: 对象转字符串
  • 如何改变输出的日期字段格式?
  • 8小时时间差问题:上面打印结果发现,时间少8小时。
  • 解决方法: 注解上增加时区。
  • 其他的一些奇怪的配置
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档