【json】Jackson的使用

【json】Jackson的使用

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

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

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

定义一个Student类:

 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}";

常规操作: 字符串转对象

 mapper.readValue(jsonString,Student.class); System.out.println(student);

打印输出结果:

Student [name=king, age=21, position=null, createTime=null]

常规操作: 对象转字符串

 student.setCreateTime(new Date()); String json = mapper.writeValueAsString(student); System.out.println(json);

打印输出结果:

{"name":"king","age":21,"position":null,"createTime":1524819355361}

如何改变输出的日期字段格式?

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

 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 } 

打印输出结果:

{"name":"king","age":21,"position":null,"createTime":"2018-04-27 09:00:56"}

8小时时间差问题:上面打印结果发现,时间少8小时。

解决方法: 注解上增加时区。

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 }

打印输出结果:

{"name":"king","age":21,"position":null,"createTime":"2018-04-27 17:07:33"}

其他的一些奇怪的配置

  1. 输出格式化,就是分行显示,该功能慎用
    java mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
    打印输出样式
    { "name" : "king", "age" : 21, "position" : null, "createTime" : "2018-04-27 17:29:01" }
  2. 异常忽略
    字符串转对象时,如果字符串中字段在对象中不存在,则忽略该字段
    ““java
    @JsonIgnoreProperties(ignoreUnknown = true)
    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
     }

    ““

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

`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.net/107556.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [WinAPI] 获取窗口句柄的几种方法[通俗易懂]

    [WinAPI] 获取窗口句柄的几种方法[通俗易懂]转:http://www.cnblogs.com/zjutlitao/p/3889900.html1、使用FindWindow函数获取窗口句柄示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小,并且移动窗口到指定位置。我们想获得酷我音乐盒的窗口句柄并移动它,该怎么办呢?首先打开VC或者VS里面tool中的SPY++点击查找窗口如下:PS:把那个靶心似的的东西…

    2022年7月21日
    42
  • 数据结构循环队列_循环队列的数据结构

    数据结构循环队列_循环队列的数据结构循环队列代码如下:#include “pch.h”#include <iostream>using namespace std;#define MAXSIZE 5struct SqQueue{ char* Base; int front; int rear;};//初始化循环队列int initqueue(SqQueue &q){ q.Bas…

    2022年8月18日
    11
  • 小程序-微信开发者工具使用教程_小程序开发教程

    小程序-微信开发者工具使用教程_小程序开发教程一、开始开发小程序的第一步,你需要拥有一个小程序帐号,通过这个帐号你就可以管理你的小程序。跟随这个教程,开始你的小程序之旅吧!二、申请帐号进入小程序注册页 (https://mp.w

    2022年8月1日
    4
  • Vue(3)webstorm代码格式规范设置与vue模板配置

    Vue(3)webstorm代码格式规范设置与vue模板配置编译器代码格式规范设置通常我们写代码时,代码缩进都是4个空格,但是在前端中,据全球投票统计,建议使用2个空格来进行代码缩进。首先我们打开webstorm中的设置,如果使用的是mac的同学直接使用c

    2022年7月29日
    28
  • acwing-个简单的整数问题2(线段树+懒惰标记)「建议收藏」

    acwing-个简单的整数问题2(线段树+懒惰标记)「建议收藏」原题链接给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问数列中第 l∼r 个数的和。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数 N,M。第二行 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,|d|≤10000,|A[

    2022年8月8日
    7
  • 开发一款Android App,从零开始详细讲解[通俗易懂]

    开发一款Android App,从零开始详细讲解[通俗易懂]入门篇:第一篇:开发环境篇第二篇:材料设计篇第三篇:规范开发篇第四篇:从项目开发到上架篇(篇章调整,最后更新)进阶篇:第五篇:设计模式篇第六篇:网络请求篇(上)    网络请求篇(下)第七篇:图片处理篇第八篇:数据库篇第九篇:开源资源篇高阶篇:第十篇:自定义控件篇第十一篇:跨进程篇关于Demo写这个系列的文章的同时,也在做一个小Demo。功能很简单,利用豆瓣电影Api实现一款基于Android的电影集合的App。starmeonGitHub! 该项目的数据源来自于豆瓣;

    2022年5月4日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号