当前位置: 首页 > news >正文

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

文章目录

    • 前言
    • 环境准备
      • 依赖库
    • 示例代码
      • JSON 数据
      • Java 类定义
      • 解析 JSON 数据
      • 代码解释
    • 结论

前言

在日常开发中,我们经常需要从 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 的 codeList<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();}
}

代码解释

  1. 解析 JSON 数据:

    • 使用 Gson 库将 JSON 字符串解析为 List<Budget> 对象。
    • TypeToken 用于指定泛型类型。
  2. 提取特定层级的数据:

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

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

结论

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

相关文章:

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

文章目录 前言环境准备依赖库 示例代码JSON 数据Java 类定义解析 JSON 数据代码解释 结论 前言 在日常开发中&#xff0c;我们经常需要从 JSON 数据中提取特定的信息。本文将介绍如何使用 Java 和 Gson 库解析 JSON 数据&#xff0c;并通过流式处理提取特定层级的数据。我们将…...

活动报名:Voice Agent 开发者分享会丨RTE Meetup

引入 voice agent 的口语学习应用 Speak 估值已达 10 亿美元 Voice Agent 开发者分享会 一同探索语音驱动的下一代人机交互界面&#xff0c;一场 voice agent builder 的小规模深度交流会。 RTE Meetup 迎来第六期&#xff01;12 月 15 日&#xff08;周日&#xff09;上午&…...

DOA估计算法——ESPRIT算法

1 简介 ESPRIT&#xff08;Estimation of Signal Parameters via Rotational Invariance Techniques&#xff09;最早是由Roy等人于1986年提出&#xff0c;是一种广泛应用于高分辨率方向到达&#xff08;DOA&#xff09;估计和频率估计的子空间方法。其核心思想基于信号子空间的…...

CEF 数据加密与网络安全

随着网络攻击的日益猖獗&#xff0c;确保应用的安全性已经成为开发者的首要任务。特别是在现代Web应用中&#xff0c;如何确保数据的加密存储、网络通信的安全性以及有效的认证机制成为至关重要的问题。对于基于 Chromium Embedded Framework (CEF) 的应用&#xff0c;开发者必…...

go build command

文章目录 1.简介2.格式3.选项4.示例5.小结参考文献 1.简介 go build 是 Go 语言工具链中的一个命令&#xff0c;它用于编译 Go 源代码并生成可执行文件。 2.格式 go build [-o output] [build flags] [packages]可选的 -o 选项强制 build 将生成的可执行文件或对象写入指定的…...

理解音频采样率和transformer模型:给Python小白的简单解释

理解音频采样率和transformer模型&#xff1a;给Python小白的简单解释 引言什么是采样率&#xff1f;举个例子有趣的现象Python小实验总结 引言 大家好&#xff01;今天我们来聊一个有趣的话题&#xff1a;音频采样率和AI模型。不要被这些专业术语吓到&#xff0c;我会用最简单…...

【RL Latest Tech】安全强化学习(Safe RL):理论、方法与应用

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

大模型qiming面试内容整理-系统设计与架构

在大模型和机器学习相关岗位的面试中,系统设计与架构的考察通常会涉及如何设计一个可扩展、可靠且高效的机器学习系统,特别是在面对大规模数据和复杂模型时。这一部分的考察不仅测试候选人对机器学习和深度学习的理解,还会评估其如何设计实际生产环境中的系统来满足需求。以…...

Mac/Windows端长期破解myBase8方法(无需安装火绒)

提醒 不管哪个端&#xff0c;都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100&#xff0c;即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.&#xff0c;显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件&#xff0c;删除Fir…...

firewall

firewall 如果系统使用 firewalld 作为防火墙管理工具&#xff0c;可以使用以下命令&#xff1a; 查看防火墙是否运行&#xff1a; systemctl status firewalld查看防火墙的状态&#xff08;简洁输出&#xff09;&#xff1a; firewall-cmd --state输出示例&#xff1a; r…...

XSS(跨站攻击)

XSS漏洞&#xff08;跨站脚本&#xff09; 1.XSS 漏洞简介 ​ XSS又叫CSS&#xff08;Cross Site Script&#xff09;跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从…...

Tomcat添加各种响应头 X-Download-Options、Permissions-Policy等

AI越来越火了,我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 最近部署的项目被绿盟扫出来很多web漏洞,其中tomcat响应占了很大一部分。下面我们整理一下如何处理。 首先说说常见…...

搭建Tomcat(一)---SocketServerSocket

目录 引入1 引入2--socket 流程 Socket&#xff08;应用程序之间的通讯保障&#xff09; 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1&#xff1a;ServerSocket和Socket有什么关系&#xff1f; ServerSocket Soc…...

ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小

ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小 文章目录 ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小1. 安装 Times New Roman 字体验证字体是否安装成功 2. 在 Matplotlib 中加载 Times New Roman 字体3. 在 Matplotlib 中使…...

openGauss开源数据库实战二十三

文章目录 任务二十三 openGauss 参数管理任务目标实施步骤一、启动参数文件及参数类型1.参数值修改后必须重新启动数据库的参数2.参数值修改后只需要reload操作的参数 二、设置数据库级参数三、设置用户级参数四、设置会话级参数五、将参数设置为默认值 任务二十三 openGauss 参…...

MySQL 复合查询(重点)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 MySQL 复合查询&#xff08;重点&#xff09; 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …...

ASP.NET |日常开发中连接Oracle数据库详解

ASP.NET &#xff5c;日常开发中连接Oracle数据库详解 前言一、安装和配置 Oracle 数据访问组件1.1 安装ODP.NET&#xff08;Oracle Data Provider for.NET&#xff09;&#xff1a;1.2 引用相关程序集&#xff1a; 二、配置连接字符串2.1 连接字符串的基本组成部分&#xff1a…...

java_连接数据库的方法_后端处理_前端调用_打通整体思路

参考&#xff1a;14 尚上优选项目-平台管理端-权限管理模块-开发角色管理接口&#xff08;上&#xff09;_哔哩哔哩_bilibili 第一步. 定义数据 在数据库中定义好数据&#xff08;如role表格&#xff09;&#xff0c;在java后端定义好对应的实体类&#xff08;Role类&#xf…...

网络安全知识点

第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或恶意的原因而遭到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 1.2.3 网络安全的种类P5 &#xff08;1…...

pyfink1.20版本下实现消费kafka中数据并实时计算

1、环境 JDK版本&#xff1a;1.8.0_412python版本&#xff1a;3.10.6apache-flink版本&#xff1a;1.20.0flink版本&#xff1a;1.20kafka版本&#xff1a;kafka_2.12-3.1.1flink-sql-connector-kafka版本&#xff1a;3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...