本文主要是介绍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序列化和反序列化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!