返回
Jackson 反序列化对象数组:从入门到精通
java
2024-03-04 22:44:19
使用 Jackson 反序列化对象数组:深入浅出指南
简介
Jackson 是 Java 中流行且功能强大的 JSON 库,它允许你将 JSON 数据映射到 Java 对象和反之亦然。在许多情况下,你可能需要反序列化 JSON 数组,其中包含多个同类型对象。在本文中,我们将深入探讨如何使用 Jackson 实现此目标。
问题
要反序列化单个对象,你可以使用 objectMapper.readValue(json, MyClass.class)
,其中 json
是 JSON 字符串,MyClass
是要映射到的 Java 类。但是,对于数组,该方法不起作用。
解决方案:TypeReference
Jackson 提供了一个名为 TypeReference
的类,它允许你指定要反序列化的集合或数组的类型。以下是使用 TypeReference
反序列化对象数组的步骤:
- 创建 TypeReference: 创建一个匿名内部类,从
TypeReference<Collection<MyClass>>
扩展。 - 反序列化: 使用
objectMapper.readValue(json, typeReference)
方法反序列化 JSON 字符串,其中typeReference
是你在第一步中创建的TypeReference
。
示例代码
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class MyClass {
private String id;
private String stuff;
// 省略 getters 和 setters
}
public class JacksonArrayDeserializationExample {
public static void main(String[] args) throws Exception {
String json = "[{\"id\": \"junk\", \"stuff\": \"things\"}, {\"id\": \"spam\", \"stuff\": \"eggs\"}]";
ObjectMapper objectMapper = new ObjectMapper();
// 创建 TypeReference
TypeReference<List<MyClass>> typeReference = new TypeReference<List<MyClass>>() {};
// 反序列化 JSON
List<MyClass> entries = objectMapper.readValue(json, typeReference);
// 打印反序列化的对象
for (MyClass entry : entries) {
System.out.println(entry.getId() + " - " + entry.getStuff());
}
}
}
输出:
junk - things
spam - eggs
提示
TypeReference
是一种泛型类,因此你可以指定任何类型的集合或数组。- 如果你使用 Jackson 2.x,可以使用
objectMapper.readValue(json, MyClass[].class)
来反序列化对象数组。
常见问题解答
-
什么是 TypeReference?
TypeReference
是一个类,允许你指定要反序列化的集合或数组的类型。
-
如何创建 TypeReference?
- 创建一个匿名内部类,从
TypeReference<Collection<YourClass>>
扩展。
- 创建一个匿名内部类,从
-
如何使用 TypeReference 反序列化数组?
- 使用
objectMapper.readValue(json, typeReference)
方法,其中typeReference
是你创建的TypeReference
。
- 使用
-
是否可以使用 Jackson 2.x 反序列化数组?
- 是的,你可以使用
objectMapper.readValue(json, MyClass[].class)
。
- 是的,你可以使用
-
我是否可以使用 TypeReference 反序列化其他类型的集合?
- 是的,
TypeReference
可用于反序列化任何类型的集合或数组。
- 是的,