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 数据。

相关推荐
Json_1817901448032 分钟前
商品详情接口使用方法和对接流程如下
大数据·json
ZhongruiRao1 天前
Springboot+PostgreSQL+MybatisPlus存储JSON或List、数组(Array)数据
spring boot·postgresql·json
华农第一蒟蒻1 天前
Java中JWT(JSON Web Token)的运用
java·前端·spring boot·json·token
胡耀超1 天前
知识图谱入门——8: KG开发常见数据格式:OWL、RDF、XML、GraphML、JSON、CSV。
xml·json·知识图谱·csv·owl·graphml·gml
x-cmd1 天前
[241005] 14 款最佳免费开源图像处理库 | PostgreSQL 17 正式发布
数据库·图像处理·sql·安全·postgresql·开源·json
先知demons2 天前
js将对象的键和值分别归纳进对象,并将多层对象转化成数据的方法
javascript·vue.js·json
Midsummer啦啦啦2 天前
Python字符串转JSON格式指南
开发语言·python·json
前端 贾公子2 天前
Express内置的中间件(express.json和express.urlencoded)格式的请求体数据
中间件·json·express
迷失蒲公英2 天前
在线JSON可视化工具--支持缩放
json·在线json可视化·在线json格式化
bug菌¹4 天前
滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用
数据库·mysql·json·全文索引