媒介
在日常开发中,我们经常须要从 JSON 数据中提取特定的信息。本文将介绍如何利用 Java 和 Gson 库剖析 JSON 数据,并通过流式处理提取特定层级的数据。我们将以一个详细的例子来说明这一过程。
环境预备
依靠库
本文利用了以下依靠库:
- Gson: 用于 JSON 剖析。
- Lombok: 用于简化 Java 类的编写。
在 pom.xml 文件中添加以下依靠:
- <dependencies>
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>2.8.8</version>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.20</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
复制代码 示例代码
JSON 数据
假设我们有以下 JSON 数据,表示多个预算条目及其子条目:
- [
- {
- "id": 1309,
- "code": "BD000020",
- "level": 1,
- "children": [
- {
- "id": 1664,
- "code": "BD000020001",
- "level": 2,
- "children": [
- {
- "id": 1665,
- "code": "BD000020001001",
- "level": 3
- }
- ]
- }
- ]
- },
- {
- "id": 1226,
- "code": "BD000014",
- "level": 1,
- "children": [
- {
- "id": 1227,
- "code": "BD000014001",
- "level": 2,
- "children": [
- {
- "id": 1229,
- "code": "BD000014001001",
- "level": 3
- }
- ]
- },
- {
- "id": 1228,
- "code": "BD000014002",
- "level": 2,
- "children": [
- {
- "id": 1230,
- "code": "BD000014002001",
- "level": 3
- }
- ]
- }
- ]
- }
- ]
复制代码 Java 类定义
起首,我们须要定义一个 Java 类来表示预算条目。这里利用 Lombok 的 @Data 注解来简化类的编写。
- import lombok.Data;
- @Data
- class Budget {
- private String code;
- private Integer level;
- private List<Budget> children;
- }
复制代码 剖析 JSON 数据
接下来,我们利用 Gson 库将 JSON 字符串剖析为 List<Budget> 对象。
- import com.google.gson.Gson;
- import com.google.gson.reflect.TypeToken;
- import java.util.List;
- public class Level {
- private static String json = "[...]" // 上述 JSON 数据
- public static void main(String[] args) {
- // 将 jsonString 转成 List<Budget> 对象
- Gson gson = new Gson();
- List<Budget> budgets = gson.fromJson(json, new TypeToken<List<Budget>>() {}.getType());
- System.out.println(budgets);
- // 通过 stream 获取 budget 中所有 level=3 的 code
- List<String> codes = budgets.stream()
- .flatMap(budget -> getCodesWithLevelThree(budget))
- .collect(Collectors.toList());
- System.out.println(codes);
- }
- private static Stream<String> getCodesWithLevelThree(Budget budget) {
- if (budget.getLevel() == 3) {
- return Stream.of(budget.getCode());
- } else if (budget.getChildren() != null) {
- return budget.getChildren().stream().flatMap(Level::getCodesWithLevelThree);
- }
- return Stream.empty();
- }
- }
复制代码 代码解释
- 剖析 JSON 数据:
- 利用 Gson 库将 JSON 字符串剖析为 List<Budget> 对象。
- TypeToken 用于指定泛型范例。
- 提取特定层级的数据:
- 利用 Stream API 递归地遍历每个预算条目及其子条目。
- getCodesWithLevelThree 方法查抄当前条目的层级是否为 3,如果是,则返回其代码;否则,递归处理其子条目。
- 输出结果:
- 打印剖析后的 List<Budget> 对象。
- 打印所有层级为 3 的代码。
结论
通过本文的示例,我们可以看到利用 Java 和 Gson 库剖析 JSON 数据并提取特定层级的数据是非常简单和高效的。盼望本文能对大家在实际开发中处理类似问题提供帮助。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |