Java 小抄|剖析 JSON 并提取特定层级数据

守听  金牌会员 | 2024-12-17 03:21:59 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 753|帖子 753|积分 2259

媒介

在日常开发中,我们经常须要从 JSON 数据中提取特定的信息。本文将介绍如何利用 Java 和 Gson 库剖析 JSON 数据,并通过流式处理提取特定层级的数据。我们将以一个详细的例子来说明这一过程。
环境预备

依靠库

本文利用了以下依靠库:


  • Gson: 用于 JSON 剖析。
  • Lombok: 用于简化 Java 类的编写。
在 pom.xml 文件中添加以下依靠:
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>com.google.code.gson</groupId>
  4.         <artifactId>gson</artifactId>
  5.         <version>2.8.8</version>
  6.     </dependency>
  7.     <dependency>
  8.         <groupId>org.projectlombok</groupId>
  9.         <artifactId>lombok</artifactId>
  10.         <version>1.18.20</version>
  11.         <scope>provided</scope>
  12.     </dependency>
  13. </dependencies>
复制代码
示例代码

JSON 数据

假设我们有以下 JSON 数据,表示多个预算条目及其子条目:
  1. [
  2.     {
  3.         "id": 1309,
  4.         "code": "BD000020",
  5.         "level": 1,
  6.         "children": [
  7.             {
  8.                 "id": 1664,
  9.                 "code": "BD000020001",
  10.                 "level": 2,
  11.                 "children": [
  12.                     {
  13.                         "id": 1665,
  14.                         "code": "BD000020001001",
  15.                         "level": 3
  16.                     }
  17.                 ]
  18.             }
  19.         ]
  20.     },
  21.     {
  22.         "id": 1226,
  23.         "code": "BD000014",
  24.         "level": 1,
  25.         "children": [
  26.             {
  27.                 "id": 1227,
  28.                 "code": "BD000014001",
  29.                 "level": 2,
  30.                 "children": [
  31.                     {
  32.                         "id": 1229,
  33.                         "code": "BD000014001001",
  34.                         "level": 3
  35.                     }
  36.                 ]
  37.             },
  38.             {
  39.                 "id": 1228,
  40.                 "code": "BD000014002",
  41.                 "level": 2,
  42.                 "children": [
  43.                     {
  44.                         "id": 1230,
  45.                         "code": "BD000014002001",
  46.                         "level": 3
  47.                     }
  48.                 ]
  49.             }
  50.         ]
  51.     }
  52. ]
复制代码
Java 类定义

起首,我们须要定义一个 Java 类来表示预算条目。这里利用 Lombok 的 @Data 注解来简化类的编写。
  1. import lombok.Data;
  2. @Data
  3. class Budget {
  4.     private String code;
  5.     private Integer level;
  6.     private List<Budget> children;
  7. }
复制代码
剖析 JSON 数据

接下来,我们利用 Gson 库将 JSON 字符串剖析为 List<Budget> 对象。
  1. import com.google.gson.Gson;
  2. import com.google.gson.reflect.TypeToken;
  3. import java.util.List;
  4. public class Level {
  5.     private static String json = "[...]" // 上述 JSON 数据
  6.     public static void main(String[] args) {
  7.         // 将 jsonString 转成 List<Budget> 对象
  8.         Gson gson = new Gson();
  9.         List<Budget> budgets = gson.fromJson(json, new TypeToken<List<Budget>>() {}.getType());
  10.         System.out.println(budgets);
  11.         // 通过 stream 获取 budget 中所有 level=3 的 code
  12.         List<String> codes = budgets.stream()
  13.                 .flatMap(budget -> getCodesWithLevelThree(budget))
  14.                 .collect(Collectors.toList());
  15.         System.out.println(codes);
  16.     }
  17.     private static Stream<String> getCodesWithLevelThree(Budget budget) {
  18.         if (budget.getLevel() == 3) {
  19.             return Stream.of(budget.getCode());
  20.         } else if (budget.getChildren() != null) {
  21.             return budget.getChildren().stream().flatMap(Level::getCodesWithLevelThree);
  22.         }
  23.         return Stream.empty();
  24.     }
  25. }
复制代码
代码解释


  • 剖析 JSON 数据:

    • 利用 Gson 库将 JSON 字符串剖析为 List<Budget> 对象。
    • TypeToken 用于指定泛型范例。

  • 提取特定层级的数据:

    • 利用 Stream API 递归地遍历每个预算条目及其子条目。
    • getCodesWithLevelThree 方法查抄当前条目的层级是否为 3,如果是,则返回其代码;否则,递归处理其子条目。

  • 输出结果:

    • 打印剖析后的 List<Budget> 对象。
    • 打印所有层级为 3 的代码。

结论

通过本文的示例,我们可以看到利用 Java 和 Gson 库剖析 JSON 数据并提取特定层级的数据是非常简单和高效的。盼望本文能对大家在实际开发中处理类似问题提供帮助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表