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

embedded/2024/9/23 12:28:36/

引言

在数据处理和分析的世界中,经常需要将数据从一种格式转换为另一种更便于处理或分析的格式。本文将详细介绍如何使用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/embedded/32102.html

相关文章

Agent AI智能体,塑造智能新纪元

Agent AI智能体&#xff0c;即AI Agent&#xff0c;是指人工智能代理&#xff0c;是一种能够感知环境、进行决策和执行动作的智能实体。它具备通过独立思考、调用工具逐步完成给定目标的能力。与大模型不同&#xff0c;AI Agent的工作仅需给定一个目标&#xff0c;它就能够针对…

「2024年」前端开发常用工具函数总结 TypeScript

前言 在前端开发中&#xff0c;工具函数是提高代码复用率、保持代码整洁和增加开发效率的关键。使用 TypeScript 编写工具函数不仅可以帮助开发者捕捉到更多的类型错误&#xff0c;还可以提供更清晰的代码注释和更智能的代码补全。下面是一些在 TypeScript 中常用的前端开发工…

【前端学习——react文档】学习react文档笔记(持续更新)

React官方文档 我不一定按照文档顺序记录 jsx语法系列 JSX 中通过大括号使用 JavaScript 可以在哪使用大括号 &#xff1f; 用作 JSX 标签内的文本&#xff1a;<h1>{name}s To Do List</h1> 是有效的&#xff0c;但是 <{tag}>Gregorio Y. Zaras To Do Lis…

数据结构—C语言实现双向链表

目录 1.双向带头循环链表 2.自定义头文件&#xff1a; 3.List.cpp 文件 3.1 newnode()函数讲解 3.2 init() 函数 初始化 3.3 pushback()函数 尾插 3.4 pushfront()函数 头插 3.5 popback() 尾删 3.6 popfront() 函数 头删 3.7 insert()函数 在pos之后插入 3.8 popbac…

Electron使用 SQLite

在客户端开发中&#xff0c;无论是 PC 端&#xff0c;还是手机端&#xff0c;为了能够访问离线数据&#xff0c;数据经常需要保存到本地&#xff0c;IndexDB 可以用于存储本地数据&#xff0c;IndexDB 是一个对象存储&#xff0c;数据是以 key:value 的形式进行存储和访问的&am…

从字符串到序列:Jinja2 过滤器的终极指南(Jinja2 filter过滤器的使用方法整理与总结)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 过滤器 📒📝 字符串过滤器📝 数字过滤器📝 列表和序列过滤器📝 字典过滤器📝 自定义过滤器🎈 演示示例🎈📝 字符串过滤器📝 数字过滤器📝 列表和序列过滤器📝 字典过滤器📝 自定义过滤器

Linux 第十六章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

Vue在/public目录下访问process.env.NODE_ENV(其它通用)

总所周知,/public目录下的js文件是不会经过webpack处理的. 所以process.env.NODE_ENV 也无效.无法判断,当要根据这个去判断的时候就麻烦了. 但有个办法可以解决这个问题. 先安装 npm install --save-dev cross-env 就是在index.html里面去赋值到window变量中,如下 在 /pu…