Java Map 接收多层级 JSON
在 Java 开发中,处理 JSON 数据是一项常见的任务。JSON(JavaScript Object Notation)是一种常用的数据交换格式,其结构简单清晰,易于阅读和编写。在实际开发中,我们经常会遇到需要将多层级的 JSON 数据解析成 Java 对象的情况。
Java 提供了多种处理 JSON 数据的库,如 Jackson、Gson 等。其中,使用 Map 来接收多层级的 JSON 数据是一种简单而常见的方法。本文将介绍如何使用 Java Map 来接收和解析多层级的 JSON 数据,并提供相应的代码示例。
1. 引入依赖
首先,我们需要在项目中引入 JSON 数据处理的相关依赖。在本文中,我们使用 Jackson 库作为示例。可以在 Maven 或 Gradle 中添加以下依赖:
Maven 依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
Gradle 依赖:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.4'
2. 使用 Map 接收 JSON 数据
假设我们有如下的 JSON 数据:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York"
},
"hobbies": ["reading", "swimming"]
}
我们可以使用以下代码将 JSON 数据解析为 Map 对象:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonExample {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"John\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\"},\"hobbies\":[\"reading\",\"swimming\"]}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> data = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
// 获取 name 和 age
String name = (String) data.get("name");
int age = (int) data.get("age");
System.out.println("Name: " + name);
System.out.println("Age: " + age);
// 获取 address
Map<String, Object> address = (Map<String, Object>) data.get("address");
String street = (String) address.get("street");
String city = (String) address.get("city");
System.out.println("Street: " + street);
System.out.println("City: " + city);
// 获取 hobbies
List<String> hobbies = (List<String>) data.get("hobbies");
System.out.println("Hobbies: " + hobbies);
}
}
在上述代码中,我们使用 ObjectMapper
类将 JSON 数据解析为 Map<String, Object>
对象。首先,我们获取顶层字段(如 name 和 age),然后使用相应的类型转换获取嵌套字段(如 address 和 hobbies)。
运行上述代码将输出以下结果:
Name: John
Age: 30
Street: 123 Main St
City: New York
Hobbies: [reading, swimming]
3. 深层次的 JSON 数据
如果 JSON 数据更加复杂,包含多个嵌套层次的字段,我们可以通过递归的方式解析它们。以下是一个示例:
public class JsonExample {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"John\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"country\":{\"name\":\"USA\",\"code\":\"US\"}},\"hobbies\":[\"reading\",\"swimming\"]}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> data = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
printData(data);
}
private static void printData(Map<String, Object> data) {
for (Map.Entry<String, Object> entry : data.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (value instanceof Map) {
System.out.println("Key: " + key);
printData((Map<String, Object>) value);
} else if (value instanceof List) {
System.out.println("Key: " + key);
for (Object item : (List) value) {
if (item instanceof Map) {
printData((Map<String, Object>) item);
} else {
System.out.println("Value: " + item);
}
}
} else