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

2024-02-05 05:04

本文主要是介绍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 数据。

这篇关于ObjectMapper之处理JSON序列化和反序列化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679812

相关文章

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

Java序列化之serialVersionUID的用法解读

《Java序列化之serialVersionUID的用法解读》Java序列化之serialVersionUID:本文介绍了Java对象的序列化和反序列化过程,强调了serialVersionUID的作... 目录JavChina编程a序列化之serialVersionUID什么是序列化为什么要序列化serialV

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

java反序列化serialVersionUID不一致问题及解决

《java反序列化serialVersionUID不一致问题及解决》文章主要讨论了在Java中序列化和反序列化过程中遇到的问题,特别是当实体类的`serialVersionUID`发生变化或未设置时,... 目录前言一、序列化、反序列化二、解决方法总结前言serialVersionUID变化后,反序列化失

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理