文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详解Java-Jackson使用

2024-04-02 19:55

关注

序列化

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯