女排世界杯_1966世界杯 - ezrjnk120.com

常见的用Java来解析复杂Json的例子

2025-06-02 08:55:23

解析复杂的JSON字符串在Java中可以通过多种工具和库来实现。常用的库包括Jackson、Gson和org.json等。以下是使用各种库的示例来解析复杂的JSON字符串。

使用Jackson

Jackson是一个非常流行的JSON处理库,非常适合解析复杂的JSON结构。

依赖

首先,确保在你的项目中包含Jackson的依赖。例如,在Maven项目中,你可以在pom.xml添加以下依赖:

com.fasterxml.jackson.core

jackson-databind

2.13.1

示例JSON

假设有以下复杂的JSON字符串:

{

"id": 1,

"projectName": "Example Project",

"details": {

"description": "This is a sample project",

"fileDetails": [

{

"fileUrl": "https://example.com/files/document1.pdf",

"fileName": "document1.pdf",

"fileSize": "2048KB"

},

{

"fileUrl": "https://example.com/files/document2.pdf",

"fileName": "document2.pdf",

"fileSize": "1024KB"

}

]

},

"metaData": {

"createdAt": "2021-10-24T14:48:00.000Z",

"updatedAt": "2021-11-24T14:48:00.000Z"

}

}

Java对象

根据JSON结构,定义相应的Java类来映射这些数据:

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

public class ImportFileDetailRequest {

@JsonProperty("fileUrl")

private String fileUrl;

@JsonProperty("fileName")

private String fileName;

@JsonProperty("fileSize")

private String fileSize;

// Getters and Setters

}

public class Details {

@JsonProperty("description")

private String description;

@JsonProperty("fileDetails")

private List fileDetails;

// Getters and Setters

}

public class MetaData {

@JsonProperty("createdAt")

private String createdAt;

@JsonProperty("updatedAt")

private String updatedAt;

// Getters and Setters

}

public class Project {

@JsonProperty("id")

private int id;

@JsonProperty("projectName")

private String projectName;

@JsonProperty("details")

private Details details;

@JsonProperty("metaData")

private MetaData metaData;

// Getters and Setters

}

解析JSON

使用Jackson的ObjectMapper类来解析JSON字符串:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParserExample {

public static void main(String[] args) {

String jsonString = "{ \"id\": 1, \"projectName\": \"Example Project\", \"details\": { \"description\": \"This is a sample project\", \"fileDetails\": [ { \"fileUrl\": \"https://example.com/files/document1.pdf\", \"fileName\": \"document1.pdf\", \"fileSize\": \"2048KB\" }, { \"fileUrl\": \"https://example.com/files/document2.pdf\", \"fileName\": \"document2.pdf\", \"fileSize\": \"1024KB\" } ] }, \"metaData\": { \"createdAt\": \"2021-10-24T14:48:00.000Z\", \"updatedAt\": \"2021-11-24T14:48:00.000Z\" }}";

ObjectMapper objectMapper = new ObjectMapper();

try {

Project project = objectMapper.readValue(jsonString, Project.class);

System.out.println("Project Name: " + project.getProjectName());

System.out.println("File Details: " + project.getDetails().getFileDetails());

} catch (Exception e) {

e.printStackTrace();

}

}

}

使用Gson

Gson是另一个流行的JSON解析库。

依赖

确保在你的项目中包含Gson的依赖。例如,在Maven项目中:

com.google.code.gson

gson

2.8.8

解析JSON

使用Gson来解析相同的JSON字符串:

import com.google.gson.Gson;

import com.google.gson.annotations.SerializedName;

import java.util.List;

public class Main {

public static void main(String[] args) {

String jsonString = "{ \"id\": 1, \"projectName\": \"Example Project\", \"details\": { \"description\": \"This is a sample project\", \"fileDetails\": [ { \"fileUrl\": \"https://example.com/files/document1.pdf\", \"fileName\": \"document1.pdf\", \"fileSize\": \"2048KB\" }, { \"fileUrl\": \"https://example.com/files/document2.pdf\", \"fileName\": \"document2.pdf\", \"fileSize\": \"1024KB\" } ] }, \"metaData\": { \"createdAt\": \"2021-10-24T14:48:00.000Z\", \"updatedAt\": \"2021-11-24T14:48:00.000Z\" }}";

Gson gson = new Gson();

Project project = gson.fromJson(jsonString, Project.class);

System.out.println("Project Name: " + project.getProjectName());

System.out.println("File Details: " + project.getDetails().getFileDetails());

}

}

class ImportFileDetailRequest {

@SerializedName("fileUrl")

private String fileUrl;

@SerializedName("fileName")

private String fileName;

@SerializedName("fileSize")

private String fileSize;

// Getters and Setters

}

class Details {

@SerializedName("description")

private String description;

@SerializedName("fileDetails")

private List fileDetails;

// Getters and Setters

}

class MetaData {

@SerializedName("createdAt")

private String createdAt;

@SerializedName("updatedAt")

private String updatedAt;

// Getters and Setters

}

class Project {

@SerializedName("id")

private int id;

@SerializedName("projectName")

private String projectName;

@SerializedName("details")

private Details details;

@SerializedName("metaData")

private MetaData metaData;

// Getters and Setters

}

使用org.json

org.json库提供了较为直接的方式来操作JSON对象。

依赖

确保在你的项目中包含org.json依赖。例如,在Maven项目中:

org.json

json

20210307

解析JSON

使用JSONObject和JSONArray来解析JSON字符串:

import org.json.JSONArray;

import org.json.JSONObject;

public class JsonParserUsingOrgJson {

public static void main(String[] args) {

String jsonString = "{ \"id\": 1, \"projectName\": \"Example Project\", \"details\": { \"description\": \"This is a sample project\", \"fileDetails\": [ { \"fileUrl\": \"https://example.com/files/document1.pdf\", \"fileName\": \"document1.pdf\", \"fileSize\": \"2048KB\" }, { \"fileUrl\": \"https://example.com/files/document2.pdf\", \"fileName\": \"document2.pdf\", \"fileSize\": \"1024KB\" } ] }, \"metaData\": { \"createdAt\": \"2021-10-24T14:48:00.000Z\", \"updatedAt\": \"2021-11-24T14:48:00.000Z\" }}";

JSONObject jsonObject = new JSONObject(jsonString);

int id = jsonObject.getInt("id");

String projectName = jsonObject.getString("projectName");

JSONObject details = jsonObject.getJSONObject("details");

String description = details.getString("description");

JSONArray fileDetails = details.getJSONArray("fileDetails");

System.out.println("Project ID: " + id);

System.out.println("Project Name: " + projectName);

System.out.println("Description: " + description);

for (int i = 0; i < fileDetails.length(); i++) {

JSONObject fileDetail = fileDetails.getJSONObject(i);

System.out.println("File URL: " + fileDetail.getString("fileUrl"));

System.out.println("File Name: " + fileDetail.getString("fileName"));

System.out.println("File Size: " + fileDetail.getString("fileSize"));

}

JSONObject metaData = jsonObject.getJSONObject("metaData");

String createdAt = metaData.getString("createdAt");

String updatedAt = metaData.getString("updatedAt");

System.out.println("Created At: " + createdAt);

System.out.println("Updated At: " + updatedAt);

}

}

使用Hutool.JSONUtil

Hutool 是一个功能强大且轻量级的 Java 工具库,提供了丰富的工具类,其中 JSONUtil 类可以方便地解析和操作 JSON 数据。下面是使用 Hutool 解析复杂 JSON 字符串的完整示例。

示例 JSON 字符串

假设有以下复杂的 JSON 字符串:

{

"id": 1,

"projectName": "Example Project",

"details": {

"description": "This is a sample project",

"fileDetails": [

{

"fileUrl": "https://example.com/files/document1.pdf",

"fileName": "document1.pdf",

"fileSize": "2048KB"

},

{

"fileUrl": "https://example.com/files/document2.pdf",

"fileName": "document2.pdf",

"fileSize": "1024KB"

}

]

},

"metaData": {

"createdAt": "2021-10-24T14:48:00.000Z",

"updatedAt": "2021-11-24T14:48:00.000Z"

}

}

添加 Hutool 依赖

确保在你的项目中包含 Hutool 的依赖。例如,在 Maven 项目中,你可以在 pom.xml 文件中添加以下依赖:

cn.hutool

hutool-all

5.7.17

定义 Java 类

定义与 JSON 结构对应的 Java 类:

import cn.hutool.core.annotation.Alias;

import java.util.List;

public class ImportFileDetailRequest {

@Alias("fileUrl")

private String fileUrl;

@Alias("fileName")

private String fileName;

@Alias("fileSize")

private String fileSize;

// Getters and Setters

}

public class Details {

@Alias("description")

private String description;

@Alias("fileDetails")

private List fileDetails;

// Getters and Setters

}

public class MetaData {

@Alias("createdAt")

private String createdAt;

@Alias("updatedAt")

private String updatedAt;

// Getters and Setters

}

public class Project {

@Alias("id")

private int id;

@Alias("projectName")

private String projectName;

@Alias("details")

private Details details;

@Alias("metaData")

private MetaData metaData;

// Getters and Setters

}

解析 JSON

使用 Hutool 的 JSONUtil 类来解析 JSON 字符串:

import cn.hutool.json.JSONUtil;

public class JsonParserExample {

public static void main(String[] args) {

String jsonString = "{ \"id\": 1, \"projectName\": \"Example Project\", \"details\": { \"description\": \"This is a sample project\", \"fileDetails\": [ { \"fileUrl\": \"https://example.com/files/document1.pdf\", \"fileName\": \"document1.pdf\", \"fileSize\": \"2048KB\" }, { \"fileUrl\": \"https://example.com/files/document2.pdf\", \"fileName\": \"document2.pdf\", \"fileSize\": \"1024KB\" } ] }, \"metaData\": { \"createdAt\": \"2021-10-24T14:48:00.000Z\", \"updatedAt\": \"2021-11-24T14:48:00.000Z\" }}";

// 解析 JSON 字符串

Project project = JSONUtil.toBean(jsonString, Project.class);

// 输出解析结果

System.out.println("Project Name: " + project.getProjectName());

System.out.println("Description: " + project.getDetails().getDescription());

for (ImportFileDetailRequest fileDetail : project.getDetails().getFileDetails()) {

System.out.println("File URL: " + fileDetail.getFileUrl());

System.out.println("File Name: " + fileDetail.getFileName());

System.out.println("File Size: " + fileDetail.getFileSize());

}

System.out.println("Created at: " + project.getMetaData().getCreatedAt());

System.out.println("Updated at: " + project.getMetaData().getUpdatedAt());

}

}

逐步解析JSON

如果不想映射成Java对象,可以使用JSONObject和JSONArray逐步解析:

import cn.hutool.json.JSONUtil;

import cn.hutool.json.JSONObject;

import cn.hutool.json.JSONArray;

import java.util.List;

public class JsonParserStepByStep {

public static void main(String[] args) {

String jsonString = "{ \"id\": 1, \"projectName\": \"Example Project\", \"details\": { \"description\": \"This is a sample project\", \"fileDetails\": [ { \"fileUrl\": \"https://example.com/files/document1.pdf\", \"fileName\": \"document1.pdf\", \"fileSize\": \"2048KB\" }, { \"fileUrl\": \"https://example.com/files/document2.pdf\", \"fileName\": \"document2.pdf\", \"fileSize\": \"1024KB\" } ] }, \"metaData\": { \"createdAt\": \"2021-10-24T14:48:00.000Z\", \"updatedAt\": \"2021-11-24T14:48:00.000Z\" }}";

// 将字符串转成JSONObject对象

JSONObject jsonObject = JSONUtil.parseObj(jsonString);

// 逐步解析数据

int id = jsonObject.getInt("id");

String projectName = jsonObject.getStr("projectName");

JSONObject details = jsonObject.getJSONObject("details");

String description = details.getStr("description");

JSONArray fileDetails = details.getJSONArray("fileDetails");

System.out.println("Project ID: " + id);

System.out.println("Project Name: " + projectName);

System.out.println("Description: " + description);

for (int i = 0; i < fileDetails.size(); i++) {

JSONObject fileDetail = fileDetails.getJSONObject(i);

String fileUrl = fileDetail.getStr("fileUrl");

String fileName = fileDetail.getStr("fileName");

String fileSize = fileDetail.getStr("fileSize");

System.out.println("File URL: " + fileUrl);

System.out.println("File Name: " + fileName);

System.out.println("File Size: " + fileSize);

}

JSONObject metaData = jsonObject.getJSONObject("metaData");

String createdAt = metaData.getStr("createdAt");

String updatedAt = metaData.getStr("updatedAt");

System.out.println("Created At: " + createdAt);

System.out.println("Updated At: " + updatedAt);

}

}

总结

上述示例分别展示了如何使用Jackson、Gson和org.json库以及Hutool的JSONUtil类来解析复杂的JSON字符串。根据你的需求和喜好选择合适的库,合理定义Java对象,并结合库的特点来进行JSON解析。Jackson和Gson更适合映射复杂对象,org.json则适合直接操作。