JSON转CSV:使用Java处理复杂数据结构

news/2024/12/23 6:55:57/

引言

在数据处理和分析的世界中,经常需要将数据从一种格式转换为另一种更便于处理或分析的格式。本文将详细介绍如何使用Java语言,配合Jackson和Apache Commons CSV库,将嵌套的JSON数据转换成CSV格式。这种技能在数据科学、软件开发和系统集成等领域非常有用。

准备工作

首先,确保你的Java项目中引入了必要的库。如果你使用Maven作为项目管理工具,可以在pom.xml文件中添加以下依赖:

xml

<!-- Jackson for JSON processing -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.3</version>
</dependency><!-- Apache Commons CSV for CSV writing -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.8</version>
</dependency>

示例JSON文件

假设我们有一个名为response.json的文件,其内容如下:

json

javascript">{"code": 0,"data": {"page": {"prePage": 1,"nextPage": 1,"pageNo": 1,"pageSize": 10,"totalPage": 1,"totalCount": 10},"statList": [{"statDate": "2023-12-31",// 其他字段}// 更多数据项...]}
}

Java代码实现

我们的目标是读取statList中的数据,并将其转换为CSV格式。下面是完整的Java代码实现:

java

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class JsonToCsvConverter {public static void main(String[] args) {String jsonFilePath = "response.json";String csvFilePath = "output.csv";ObjectMapper mapper = new ObjectMapper();try (FileReader fileReader = new FileReader(jsonFilePath);FileWriter fileWriter = new FileWriter(csvFilePath);CSVPrinter csvPrinter = new CSVPrinter(fileWriter, CSVFormat.DEFAULT.withHeader("statDate", "platformName", "pageName", "positionName", "productionName", "orderName", "orgName", "inventory", "backendExposurePv", "fillRate", "frontExposurePv", "clickPv", "backendClickPv", "clickRate", "orderType"))) {JsonNode rootNode = mapper.readTree(fileReader);JsonNode dataNode = rootNode.path("data");JsonNode statList = dataNode.path("statList");int count = 0;if (statList.isArray()) {for (JsonNode node : statList) {List<String> csvData = new ArrayList<>();// 添加数据到csvData列表csvData.add(node.path("statDate").asText(""));// ... 其他字段处理csvPrinter.printRecord(csvData);count++;}}csvPrinter.flush();System.out.println("CSV文件已生成!");System.out.println("原始数据中共有 " + count + " 条数据。");} catch (IOException e) {e.printStackTrace();}}
}

结论

通过上述步骤,我们不仅学会了如何处理和转换嵌套的JSON数据,还确保了数据的完整性和灵活性。这种技能对于处理复杂的数据结构非常重要,可以广泛应用于多种业务和技术场景中。

后续步骤

为了进一步提高效率和可读性,可以考虑添加异常处理和数据验证的逻辑,确保在处理大量或复杂数据时的健壮性。

如果你有任何问题或需要进一步的帮助,请随时留言或联系我。 😄👨‍💻


http://www.ppmy.cn/news/1452729.html

相关文章

Docker Compose如何安装

Docker Compose的安装通常依赖于你的操作系统。以下是在不同操作系统中安装Docker Compose的方法&#xff1a; Linux 系统 //下载最新版本的Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-$(uname -s)-$(un…

AI LLM文生图|文生视频初探与使用

引言 如今AI大模型已实现文本理解、文本生图、文生视频等操作。那么&#xff0c;普通程序员如何充分利用工具为自己添加业余乐趣呢(zhuan qian)&#xff1f;今天&#xff0c;就让我们一起快速走读下LLM给我们带来便捷和AI应用场景。 AI效率工具 使用AI进行图文视频合成&#xf…

vue3 前端表格导入并处理,fileReader.onload 方法null 的坑

fileReader.onload 方法null 修改为 fileReader.onloadend完整代码。 <el-upload ref"upload" action"/" :http-request"httpRequest" :limit"1" accept".xls" :show-file-list"false"><template #tri…

xftp破解版?No!xftp平替开源工具✔

文章目录 一、背景说明二、WindTerm介绍三、简单使用说明3.1 新建一个ssh连接窗口![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bfbe5114916e4a7e94ca0f9ceb05ca37.png)3.2 输入主机ip和端口号3.3 点击Continue3.4 输入密码3.5 登入成功3.6 下载文件到本地3.7 上…

Ollama+Open WebUI部署大模型在linux平台

Ollama安装运行 Ollama容器拉取 docker pull ollama/ollamaOllama容器CPU运行 docker run -d --restartalways -v /home/docker/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollamaOllama容器GPU运行 # nvidia-container-runtime-script.shsudo curl -s -L …

网课:第二章模拟、枚举与贪心---[NOIP2016]回文日期

题目描述 在日常生活中&#xff0c;通过年、月、日这三个要素可以表示出一个唯一确定的日期。 牛牛习惯用8位数字表示一个日期&#xff0c;其中&#xff0c;前4位代表年份&#xff0c;接下来2位代表月份&#xff0c;最后2位代表日期。显然&#xff1a;一个日期只有一种表示方…

2022 亚马逊云科技中国峰会,对话开发者论坛

目录 前言 最近整理资料发现还有一些前 2 年的内容没发出来&#xff0c;故补发记录&#xff0c;每年都有新的感悟。 开发者论坛 1. 你认为什么是开发者社区&#xff0c;如何定义一个成功的开发者社区&#xff1f; 我认为可以把开发者社区看成一个 “产品” 来对待&#xff…

LeetCode 213 —— 打家劫舍 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题是 LeetCode 198—— 打家劫舍 的升级版&#xff0c;多了一个首尾相连的设定。 因为首尾相连&#xff0c;所以第一个房屋和最后一个房屋只能偷窃其中一个。 所以&#xff0c;第一种方案就是不偷窃最后一个房…