详解Java-Jackson使用

 更新时间:2021年3月21日 15:00  点击:2269

序列化

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

Json是什么?

Jason是 JavaScript Object Notation— JavaScript对象表示法,是一种轻量级数据交换格式。主要用于数据传输,比如说在后端写了一个Java对象,想在其他地方(前端)使用这个对象,就需要转换为Json这种形式进行传输。

1.基本规则

数据在名称/值对中:json数据是由键值对构成的

值用引号引起来,也可以不使用引号

值的取值类型: 数字、字符串、布尔值、数组(如{"persons":[{},{},{}]})、对象、null

数据用逗号分隔:多个键值对由逗号分隔

方括号保存数组:[]

花括号保存对象:使用{}定义json格式

2.获取数据

json对象.键名

json对象["键名"]

数组对象[索引]

遍历

3.用途

以某种存储形式使自定义对象持久化;

将对象从一个地方传递到另一个地方。

使程序更具维护性。

Jackson

Java生态圈中有很多处理JSON和XML格式化的类库, 常见的解析器:Jsonlib,Gson,fastjson,Jackson。Jackson是其中比较著名的一个,也比较方便。,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。

1.导入Jar包

2.Json注解

@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。

@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。

public class Person {
 
  private String name;
  private int age;
   @JsonProperty("gender")
  private String gender;
 
  // @JsonIgnore//忽略该属性,不进行转换
  @JsonFormat(pattern = "yyyy-MM-dd")
  private Date birthday;
 
  public Date getBirthday() {
    return birthday;
  }
 
  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }
 
  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 getGender() {
    return gender;
  }
 
  public void setGender(String gender) {
    this.gender = gender;
  }
 
  @Override
  public String toString() {
    return "Person{" +
        "name='" + name + '\'' +
        ", age=" + age +
        ", gender='" + gender + '\'' +
        '}';
  }
}

3.Json转为Java对象

导入Jackson的相关jar包

创建Jackson的核心对象,ObjectMapper

调用ObjectMapper的相关方法进行数据转换——将Json字符串转换为Java对象

readValue(json字符串数据,类.Class)

//将Json字符串转为Java对象
  @Test
  public void test5() throws Exception{
    //json字符串
    String str="{\"gender\":\"男\",\"name\":\"zhangsan\",\"age\":23}";
    //Jackson核心对象
    ObjectMapper mapper = new ObjectMapper();
    //使用readValue方法进行转换
    Person person = mapper.readValue(str, Person.class);
    System.out.println(person);
  }

4.Java对象转换Json

导入Jackson的相关jar包

创建Jackson的核心对象,ObjectMapper

调用ObjectMapper的相关方法进行数据转换——将Java对象转换为Json

writeValue(参数,obj对象)

参数:File:将obj对象转换为JSON字符串,并保存到指定的文件中

参数:Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中

参数:OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中

writeValueAsString(obj):将对象转为json字符串(常用)

 //Java对象转Json
  @Test
  public void test1() throws IOException {
 
    //1.创建Java对象
    Person p=new Person();
    p.setName("张三");
    p.setAge(23);
    p.setGender("男");
 
    //2.创建Jackson对象 ObjectMapper
    ObjectMapper mapper=new ObjectMapper();
    //3.转换为JSOn
    String json = mapper.writeValueAsString(p);
    System.out.println(json);
    mapper.writeValue(new File("d:\\jaon.txt"),json);
    mapper.writeValue(new FileWriter("d:\\json.txt"),json);
  }
 
 
  @Test
  public void test2() throws JsonProcessingException {
 
    //1.创建Java对象
    Person p = new Person();
    p.setName("张三");
    p.setAge(23);
    p.setGender("男");
    p.setBirthday(new Date());
    //2.创建Jackson对象 ObjectMapper
    ObjectMapper mapper = new ObjectMapper();
    //3.转换为JSOn
    String json = mapper.writeValueAsString(p);
    System.out.println(json);
  }
 
 
  @Test
  public void test3() throws Exception {
    //复杂格式的转换:list
    //1.创建Java对象
    Person p1 = new Person();
    p1.setName("张三");
    p1.setAge(23);
    p1.setGender("男");
    p1.setBirthday(new Date());
 
    Person p2 = new Person();
    p2.setName("张三");
    p2.setAge(23);
    p2.setGender("男");
    p2.setBirthday(new Date());
 
    List<Person> list=new ArrayList<>();
    list.add(p1);
    list.add(p1);
  
    //2.创建Jackson对象 ObjectMapper
    ObjectMapper mapper = new ObjectMapper();
    //3.转换为JSOn
    String json = mapper.writeValueAsString(list);
    System.out.println(json);//[{"name":"张三","age":23,"gender":"男","birthday":"2021-03-19"},{"name":"张三","age":23,"gender":"男","birthday":"2021-03-19"}]
 
  }
 
  @Test
  public void  test4() throws Exception{
    //复杂格式的转换Map
    //1.创建map对象
    Map<String,Object> map=new HashMap<>();
    map.put("name","zhangsan");
    map.put("age",23);
    map.put("gender","男");
    //2.创建Jackson对象 ObjectMapper
    ObjectMapper mapper = new ObjectMapper();
    //3.转换为JSOn
    String json = mapper.writeValueAsString(map);
    System.out.println(json);//{"gender":"男","name":"zhangsan","age":23}
  }

到此这篇关于Java-Jackson使用详解的文章就介绍到这了,更多相关Java-Jackson使用详解内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Java实现经典游戏复杂迷宫

    这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
  • java 运行报错has been compiled by a more recent version of the Java Runtime

    java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01
  • 在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • 教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
  • Java如何发起http请求的实现(GET/POST)

    这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • 浅谈Java与C#的一些细微差别

    说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • 解决Java处理HTTP请求超时的问题

    这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • java 判断两个时间段是否重叠的案例

    这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • Jackson反序列化@JsonFormat 不生效的解决方案

    这篇文章主要介绍了Jackson反序列化@JsonFormat 不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-10
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24