【java实现json转化为CSV文件】

news/2024/9/25 6:19:01/

文章目录

  • JSON文件中的数据格式
  • 测试文件转换的接口


JSON文件中的数据格式

在这里插入图片描述
单条数据展开后如下:

{"text": "《邪少兵王》是冰火未央写的网络小说连载于旗峰天下","spo_list":[{"predicate": "作者", "object_type":{"@value": "人物"},"subject_type": "图书作品", "object": {"@value": "冰火未央"},"subject": "邪少兵王"}]}

测试文件转换的接口

【因为测试直接文件转化为CSV,目前的这种json数据格式在转化为JSONArray时总会报格式错误,因此我将JSON文件中的数据以换行符为分割符,进行字符串的分割,从直接文件转化改为一行数据一行数据的转化,转化结果最后存储到CSV文件中,就能成功,代码如下】

java">import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 测试文件转换的控制层*/
@RestController
@RequestMapping("/tocsv")
@RequiredArgsConstructor
public class JsonToCSVController {/***  测试接口* 批量转换json文件——csv文件*/@RequestMapping("/test2")public static void tocsv2() {String jsonFilePath = "E:\\duie_train.json"; // JSON文件路径
//        String csvFilePath = "E:\\output.csv"; // CSV文件输出路径try {// 读取JSON文件内容String jsonContent = new String(Files.readAllBytes(Paths.get(jsonFilePath)));
//            System.out.println(jsonContent);String[] jsonEntries = jsonContent.split("\\n");// 创建一个集合来存储分割后的JSON字符串List<String> splitJsonList = new ArrayList<>();// 遍历分割后的字符串数组for (String jsonEntry : jsonEntries) {// 移除字符串中的空白字符String trimmedJsonEntry = jsonEntry.trim();// 如果字符串不为空(即它是一个有效的JSON对象),则添加到集合中if (!trimmedJsonEntry.isEmpty()) {splitJsonList.add(trimmedJsonEntry);}}convertJsonToCsvlist(splitJsonList, "E:\\output.csv");} catch (IOException e) {e.printStackTrace();}}/*** 方法* 批量转换json文件——csv文件* @param jsonList* @param outputFilePath* @throws IOException*/public static void convertJsonToCsvlist(List<String> jsonList, String outputFilePath) throws IOException {try (FileWriter writer = new FileWriter(outputFilePath)) {// 写入 CSV 标题行writer.append("text").append(",").append("predicate").append(",").append("object_type").append(",").append("subject_type").append(",").append("object").append(",").append("subject").append("\n");// 遍历集合中的每个JSON字符串for (String jsonStr : jsonList) {JSONObject jsonObject = JSONObject.parseObject(jsonStr);String text = jsonObject.getString("text");JSONArray spoList = jsonObject.getJSONArray("spo_list");for (Object spo : spoList) {JSONObject spoObj = (JSONObject) spo;writer.append(text).append(",");writer.append(spoObj.getString("predicate")).append(",");JSONObject objectTypeObj = spoObj.getJSONObject("object_type");writer.append(objectTypeObj != null ? objectTypeObj.getString("@value") : "").append(",");writer.append(spoObj.getString("subject_type")).append(",");JSONObject objectObj = spoObj.getJSONObject("object");writer.append(objectObj != null ? objectObj.getString("@value") : "").append(",");writer.append(spoObj.getString("subject")).append("\n");}}}}}

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

相关文章

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

低代码引擎使能开发者定制低代码平台。它是低代码平台的底座&#xff0c;提供可视化搭建页面等基础能力&#xff0c;既可以通过线上搭配组合&#xff0c;也可以通过cli创建个人工程进行二次开发&#xff0c;实时定制出自己的低代码平台。适用于多场景的低代码平台开发&#xff…

Qt 每日面试题 -1

1、讲述Qt信号槽机制与优势与不足 优点∶ ①类型安全 需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致&#xff0c;编译器会报错。 ②松散耦合 信号和槽机制减弱了Qt对象的耦合度。激发信号…

mfc140u.dll引发的软件故障怎么破?mfc140u.dll文件损坏的解决办法全知道!

当这个重要的 DLL 文件丢失或损坏时&#xff0c;用户可能会收到一个错误消息&#xff0c;提示 “程序无法启动&#xff0c;因为计算机中缺失 mfc140u.dll” 或类似的提示。这种情况不仅令人困扰&#xff0c;而且可以干扰正常的工作流程&#xff0c;尤其是当您依赖特定软件完成日…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象

Vue3.0组合式API系列文章&#xff1a; 《Vue3.0组合式API&#xff1a;setup()函数》 《Vue3.0组合式API&#xff1a;使用reactive()、ref()创建响应式代理对象》 《Vue3.0组合式API&#xff1a;computed计算属性、watch监听器、watchEffect高级监听器》 《Vue3.0组合式API&…

Apache Doris 实践

Apache Doris 实践 官方使用指南&#xff1a;https://doris.incubator.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/ 手动安装 下载二进制安装包https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.5-bin-x64.tar.gz …

构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(1/5)

引言 在数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着互联网技术的快速发展和应用的广泛深入&#xff0c;网络安全形势日益严峻。特别是分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;以其破坏性强、难以防范的特点&#xff0c;对个人、企业乃至国…

系统架构师-面向服务架构(SOA)全解

1、为什么需要SOA架构 1.1 系统集成问题 异构系统整合 例如&#xff0c;一个企业可能同时拥有用 Java 开发的企业资源规划&#xff08;ERP&#xff09;系统、用 C# 开发的客户关系管理&#xff08;CRM&#xff09;系统以及用 Python 开发的数据分析系统。通过 SOA&#xff0…