当前位置: 首页 > news >正文

ObjectMapper之处理JSON序列化和反序列化

目录

      • 基本示例
        • Java 对象转 JSON 字符串(序列化)
        • JSON 字符串转 Java 对象(反序列化)
      • 高级特性
        • 忽略未知属性
        • 使用注解自定义序列化

当然可以。让我们通过更详细的例子来探索 ObjectMapper 的使用,包括基本的序列化和反序列化操作,以及一些高级特性。

基本示例

Java 对象转 JSON 字符串(序列化)

假设我们有一个简单的Java类 Person

public class Person {private String name;private int age;// 构造函数、getter和setter省略
}

现在,我们想要将一个 Person 对象转换成 JSON 字符串:

import com.fasterxml.jackson.databind.ObjectMapper;public class Main {public static void main(String[] args) throws Exception {Person person = new Person();person.setName("张三");person.setAge(30);ObjectMapper objectMapper = new ObjectMapper();String jsonString = objectMapper.writeValueAsString(person);System.out.println(jsonString);  // 输出:{"name":"张三","age":30}}
}
JSON 字符串转 Java 对象(反序列化)

接下来,我们将一个 JSON 字符串转换回 Person 对象:

String json = "{\"name\":\"张三\", \"age\":30}";Person person = objectMapper.readValue(json, Person.class);
System.out.println(person.getName() + ", " + person.getAge()); // 输出:张三, 30

高级特性

忽略未知属性

假设 JSON 字符串中包含了 Person 类中不存在的属性:

{"name":"李四", "age":25, "email":"lisi@example.com"}

默认情况下,尝试将这个字符串反序列化为 Person 对象时会抛出异常,因为 Person 类中没有 email 属性。我们可以通过配置 ObjectMapper 来忽略未知属性:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);Person person = objectMapper.readValue(json, Person.class);

这样,即使 JSON 中包含未知属性,反序列化操作也可以正常进行。

使用注解自定义序列化

你可以使用 Jackson 提供的注解来自定义序列化和反序列化的行为。例如,使用 @JsonProperty 注解来定义 JSON 属性名:

public class Person {@JsonProperty("full_name")private String name;private int age;// 构造函数、getter和setter省略
}

现在,序列化 Person 对象时,JSON 字符串中的属性名将是 full_name 而不是 name

Person person = new Person();
person.setName("王五");
person.setAge(40);String jsonString = objectMapper.writeValueAsString(person);
System.out.println(jsonString);  // 输出:{"full_name":"王五","age":40}

这些例子展示了 ObjectMapper 在处理 JSON 数据时的灵活性和强大功能。通过学习和利用这些特性,你可以更有效地在 Java 应用程序中使用 JSON 数据。

http://www.lryc.cn/news/294050.html

相关文章:

  • Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(八)
  • 【51单片机】直流电机实验和步进电机实验
  • django+flask网上购物商城系统的设计与实现python-vue
  • 公共用例库计划--个人版(六)典型Bug页面设计与开发
  • impala与kudu进行集成
  • 链表经典算法(+OJ刷题)
  • 网络原理TCP/IP(4)
  • 【C/C++ 11】贪吃蛇游戏
  • 【日常总结 - java】list 与 字符串(用逗号隔开)相互转换
  • 《幻兽帕鲁》好玩吗?幻兽帕鲁能在Mac上运行吗?
  • 【数据分享】1929-2023年全球站点的逐日平均能见度(Shp\Excel\免费获取)
  • 浅谈——开源软件的影响力
  • MySQL-事务(TRANSACTION)
  • Vue 实现动态路由
  • docker elasticsearch8启动失败
  • 《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)
  • 使用 IntelliJ IDEA 配合 Docker 对 Weblogic 中间件进行远程调试
  • ArcGIS学习(三)数据可视化
  • 【使用 Python 进行 NLP】 第 2 部分 NLTK
  • 【软件设计师笔记】深入探究操作系统
  • python常用pandas函数nlargest / nsmallest及其手动实现
  • web前端-------弹性盒子(2)
  • 图论练习4
  • flutter go_router 官方路由(一)基本使用
  • QT中,对于大小端UDP网络发送的demo,帧头帧尾
  • ip网络的三类地址及其相互关系
  • 开源计算机视觉库OpenCV详细介绍
  • go消息队列RabbitMQ - 订阅模式-direct
  • PyTorch 2.2 中文官方教程(十八)
  • jenkins部署vue项目