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

目录

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

基本示例

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

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

java 复制代码
public class Person {
    private String name;
    private int age;

    // 构造函数、getter和setter省略
}

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

java 复制代码
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 对象:

java 复制代码
String json = "{\"name\":\"张三\", \"age\":30}";

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

高级特性

忽略未知属性

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

json 复制代码
{"name":"李四", "age":25, "email":"lisi@example.com"}

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

java 复制代码
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Person person = objectMapper.readValue(json, Person.class);

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

使用注解自定义序列化

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

java 复制代码
public class Person {
    @JsonProperty("full_name")
    private String name;
    private int age;

    // 构造函数、getter和setter省略
}

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

java 复制代码
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 数据。

相关推荐
先做个垃圾出来………40 分钟前
JSON序列化问题
数据库·json
亚历克斯神4 小时前
Flutter 三方库 jwt_io 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、严谨、全能的 JSON Web Token (JWT) 加解密与身份安全验证引擎
flutter·json·harmonyos
冉佳驹8 小时前
Linux ——— 网络开发核心知识与协议实现详解
linux·http·https·udp·json·tcp·端口号
尘中客9 小时前
Postman进阶实战:优雅调试带 GZIP 压缩与百KB级复杂嵌套 JSON 的 RESTful API
json·postman·restful·php开发·gzip解压
wefly201720 小时前
纯前端架构深度解析:jsontop.cn,JSON 格式化与全栈开发效率平台
java·前端·python·架构·正则表达式·json·php
MegaDataFlowers1 天前
什么是JSON
json
winfreedoms1 天前
宿主机有网、Docker 容器不能解析域名?用 daemon.json 一键配置永久 DNS
运维·docker·容器·json
liliangcsdn1 天前
对基于Pydantic BaseModel的实例进行JSON序列化
人工智能·json·全文检索
Java成神之路-1 天前
序列化协议全解析:XML、SOAP、JSON 与 Protobuf 实战对比及 Protobuf 演进方案
xml·json
咸甜适中1 天前
rust序列化和反序列化(json、yaml、toml)详解
开发语言·rust·json