Java 处理 json 格式数据解析为 csv 格式

ops/2024/11/14 15:16:59/

jsoncsv_0">Java处理json格式数据解析为csv格式

如果不使用 JSON 工具库,你可以手动解析 JSON 格式字符串并将其转换为 CSV 格式字符串。
以下是一个简单示例,展示如何实现这一功能。

示例代码
下面的示例代码手动处理 JSON 字符串,将其转换为 CSV 格式字符串:

java"> /*** 接收 JSON 字符串,去掉开头和结尾的方括号,按对象划分。* 通过 extractKeys 方法提取字段名,添加到 CSV 的第一行。* 逐项解析 JSON 对象,并通过 extractValues 获取对应的值,添加到 CSV 的后续行。** @param jsonString json格式字符串* @param header     输出是否包含头标题 true包含 false不包含* @return csv 格式字符串*/public static String convertJsonToCsv(String jsonString, boolean header) {StringBuilder csvBuilder = new StringBuilder();// 假设 JSON 是一个数组的形式if (jsonString.startsWith("[") && jsonString.endsWith("]")) {// 去掉开头和结尾的方括号jsonString = jsonString.substring(1, jsonString.length() - 1).trim();String[] jsonObjects = jsonString.split("},\\s*\\{"); // 按对象划分// 处理第一项获取字段名if (header) {String[] keys = extractKeys(jsonObjects[0]);csvBuilder.append(String.join(",", keys)).append("\n");}// 逐个处理 JSON 对象for (String jsonObject : jsonObjects) {jsonObject = jsonObject.replaceAll("[{}\"]", ""); // 去掉大括号和双引号String[] values = extractValues(jsonObject);csvBuilder.append(String.join(",", values)).append("\n");}} else {// 处理第一项获取字段名if (header) {String[] keys = extractKeys(jsonString);csvBuilder.append(String.join(",", keys)).append("\n");}String[] values = extractValues(jsonString);csvBuilder.append(String.join(",", values)).append("\n");}return csvBuilder.substring(0, csvBuilder.length() - 1);}/*** 提取 JSON 对象的键,通过分隔符将 JSON 对象的属性解析成键的字符串数组。** @param jsonString json格式字符串* @return JSON 对象的键*/public static String[] extractKeys(String jsonString) {String[] parts = jsonString.split(",");String[] keys = new String[parts.length];for (int i = 0; i < parts.length; i++) {keys[i] = parts[i].split(":")[0].trim().replace("{", "").replace("}", "").replace("\"", "");}return keys;}/*** 提取 JSON 对象的键,通过分隔符将 JSON 对象的属性解析成键的字符串数组。** @param jsonString json格式字符串* @return JSON 对象的键字符串*/public static String extractKeysToString(String jsonString) {String[] values = extractKeys(jsonString);return String.join(",", values);}/*** 提取 JSON 对象的值,根据键的顺序,从 JSON 对象中对应地提取值。** @param jsonString json格式字符串* @return JSON 对象的值*/public static String[] extractValues(String jsonString) {String[] parts = jsonString.split(",");String[] values = new String[parts.length];for (int i = 0; i < parts.length; i++) {String value = parts[i].split(":")[1].trim().replace("{", "").replace("}", "").replace("\"", "");values[i] = value; // 此处直接取值,假设没有嵌套和特殊字符}return values;}/*** 提取 JSON 对象的值,根据键的顺序,从 JSON 对象中对应地提取值。** @param jsonString json格式字符串* @return JSON 对象的值字符串*/public static String extractValuesToString(String jsonString) {String[] values = extractValues(jsonString);return String.join(",", values);}public static void main(String[] args) {String json = "[{\"省份\":\"北京\",\"大学数量\":\"50\",\"大专数量\":\"80\",\"中专数量\":\"120\"}," +"{\"省份\":\"上海\",\"大学数量\":\"45\",\"大专数量\":\"75\",\"中专数量\":\"110\"}]";String string = "{\"省份\":\"北京\",\"大学数量\":\"50\",\"大专数量\":\"80\",\"中专数量\":\"120\"}";System.out.println(Arrays.toString(extractKeys(string)));System.out.println(Arrays.toString(extractValues(string)));System.out.println(extractKeysToString(string));System.out.println(extractValuesToString(string));String csvOutputWithHeader = convertJsonToCsv(json, true);System.out.println("csvOutputWithHeader:\n" + csvOutputWithHeader);String csvOutputNoHeader = convertJsonToCsv(json, false);System.out.println("csvOutputNoHeader:\n" + csvOutputNoHeader);}

测试数据结果:

[省份, 大学数量, 大专数量, 中专数量]
[北京, 50, 80, 120]
省份,大学数量,大专数量,中专数量
北京,50,80,120
csvOutputWithHeader:
省份,大学数量,大专数量,中专数量
北京,50,80,120
上海,45,75,110
csvOutputNoHeader:
北京,50,80,120
上海,45,75,110

http://www.ppmy.cn/ops/132679.html

相关文章

数据分析-39-时间序列分解之经验小波分解EWT

文章目录 1 时间序列模态分解1.1 模态分解的概念1.2 模态分解的作用1.3 常用的模态分解方法1.4 模态分解的常用库2 经验小波分解EWT2.1 EWT的流程2.2 加载数据集2.2.1 数据重采样2.2.2 原始数据可视化2.3 代码实现EWT3 参考附录1 时间序列模态分解 1.1 模态分解的概念 时间序…

es 数据清理delete_by_query

POST /索引名/_delete_by_query?conflictsproceed&scroll_size2000&wait_for_completionfalse&slices36 {"size": 2000, "query": {"bool": { "must": [{"terms": {"rule_id": [800007]}}]}} }slice…

第2章2.3立项【硬件产品立项的核心内容】

硬件产品立项的核心内容 2.3 硬件产品立项的核心内容2.3.1 第一步&#xff1a;市场趋势判断2.3.2 第二步&#xff1a;竞争对手分析1.竞争对手识别2.根据竞争对手分析制定策略 2.3.3 第三步&#xff1a;客户分析2.3.4 第四步&#xff1a;产品定义2.3.5 第五步&#xff1a;开发执…

在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序

如果您有 Android 设备&#xff0c;您可能会将个人和专业的重要文件保存在设备的 SD 卡上。这些文件包括照片、视频、文档和各种其他类型的文件。您绝对不想丢失这些文件&#xff0c;但当您的 SD 卡损坏时&#xff0c;数据丢失是不可避免的。 幸运的是&#xff0c;您不需要这样…

东胜物流软件 AttributeAdapter.aspx SQL 注入漏洞复现

0x01 产品简介 东胜物流软件是青岛东胜伟业软件有限公司一款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。该公司初创于2004年11月(前身为青岛景宏物流信息技术有限公司),专注于航运物流相关环节的产品和服务。东胜物流信息管理系统货代版采用MS-SQLser…

JMeter与大模型融合应用之jmeter.properties配置文件新增配置

JMeter与大模型融合应用之jmeter.properties配置文件新增配置 背景 Apache JMeter 是一款流行的开源性能测试工具&#xff0c;它允许用户通过创建和运行多种类型的测试来评估应用程序的性能。jmeter.properties 文件是 JMeter 的主要配置文件之一&#xff0c;用户可以在其中进…

2.操作系统常问面试题1

2.1 Linux 中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数是什么 1、查看进程运行状态的指令&#xff1a; ps aux 列出所有进程的详细信息。 ps aux | grep PID &#xff0c;查看具体某PID进程状态。 在 Linux 中&#xff0c;可以使用以下指令来查看进…

微信小程序运营日记(第四天)

2024年11月6日-星期三-2024年45周 {微信小程序的时间板块进行一个增加&#xff0c;增加&#xff1a;2024年第45周|共53周&#xff0c;星期三&#xff0c;今年时间剩余&#xff0c;本周时间剩余} 开源竞争&#xff1a; 开源竞争&#xff08;当你无法掌握一个技术就开源这个技术…