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

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.kler.cn/a/227828.html

相关文章:

  • QT简单实现验证码(字符)
  • 计算机网络一点事(22)
  • 搜索引擎快速收录:关键词布局的艺术
  • 天融信 NGFW2.3 mibs
  • OpenCV 版本不兼容导致的问题
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础组件实现)
  • java设计模式:观察者模式
  • 自动化报告pptx-python|如何将pandas的表格写入PPTX(二)
  • Git--07--GitExtension
  • 算法总结归纳(第十一天)(部分数据结构、图论(部分))
  • 算法练习-三数之和(思路+流程图+代码)
  • webpack配置
  • [Linux 进程控制(二)] 写时拷贝 - 进程终止
  • CICD注册和使用gitlab-runner常见问题
  • 界面组件DevExpress中文教程 - 如何使用UI本地化客户端工具本地化应用
  • 2023年上-未来几年我要做什么
  • 100 个 NLP 面试问题
  • LeetCode_19_中等_删除链表的倒数第N个结点
  • websocket编写聊天室
  • 简单实践 java spring cloud 负载均衡
  • 前后端数据校验
  • LFU缓存(Leetcode460)
  • GLIP:零样本学习 + 目标检测 + 视觉语言大模型
  • Skywalking trace UI页面中字段信息详解,包括端点、跨度类型和Peer
  • React16源码: React中详解在渲染阶段Suspend的源码实现
  • 大数据量处理以及结果导出技术方案