详解Java-Jackson使用

 更新时间:2022年04月03日 16:39:37   作者:小小张自由—>张有博  
这篇文章主要介绍了Java-Jackson使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

序列化

序列化 (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使用详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文彻底掌握RocketMQ 的存储模型

    一文彻底掌握RocketMQ 的存储模型

    这篇文章主要介绍了RocketMQ 的存储模型,本文的重点在于分析 BrokerServer 的消息存储模型,笔者按照自己的理解 , 尝试分析 RocketMQ 的存储模型,需要的朋友可以参考下
    2022-12-12
  • 使用Java在线生成pdf文档的代码实现

    使用Java在线生成pdf文档的代码实现

    在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,熟悉这块业务的童鞋,一定特别清楚,目前最常用的解决方案通过一些技术手段生成对应的PDF文件,下面小编给大家详细说说
    2025-04-04
  • Java实现配置加载机制

    Java实现配置加载机制

    这篇文章主要介绍了Java实现配置加载机制的相关资料,需要的朋友可以参考下
    2016-01-01
  • MyBatis中association的基本使用方法

    MyBatis中association的基本使用方法

    在项目中某些实体类之间肯定有关键关系,比如一对一,一对多等,在hibernate中用one to one和one to many,而mybatis中就用association和collection,下面这篇文章主要给大家介绍了关于MyBatis中association基本使用方法的相关资料,需要的朋友可以参考下
    2022-09-09
  • maven打包web项目时同时打包为war和jar文件的方法

    maven打包web项目时同时打包为war和jar文件的方法

    本篇文章主要介绍了maven打包web项目时同时打包为war和jar文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Mybatis参数处理的几种方法小结

    Mybatis参数处理的几种方法小结

    在Mybatis中如何处理参数是一个非常重要的环节,本文将详细介绍 Mybatis 的参数处理机制,包括传入参数和返回参数的处理方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 教你用springboot连接mysql并实现增删改查

    教你用springboot连接mysql并实现增删改查

    今天教各位小伙伴用springboot连接mysql并实现增删改查功能,文中有非常详细的步骤及代码示例,对正在学习Java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java中Stream实现List排序的六个核心技巧总结

    Java中Stream实现List排序的六个核心技巧总结

    这篇文章主要介绍了Java中Stream实现List排序的六个核心技巧,分别是自然序排序、反向排序、空值安全处理、多字段组合排序、并行流加速、原地排序等,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Springboot整合支付宝支付功能

    Springboot整合支付宝支付功能

    这篇文章主要介绍了Springboot整合支付宝支付功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Java通过MySQL的加解密函数实现敏感字段存储

    Java通过MySQL的加解密函数实现敏感字段存储

    这篇文章主要介绍了如何在Java中MySQL的加解密函数实现敏感字段存储,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-03-03

最新评论