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

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

文章目录

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


JSON文件中的数据格式

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

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

测试文件转换的接口

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

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.kler.cn/a/314794.html

相关文章:

  • 解锁微前端的优秀库
  • CSS多列布局:打破传统布局的束缚
  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • 11张思维导图带你快速学习java
  • 算法演练----24点游戏
  • 【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现
  • Kotlin 极简小抄 P3(函数、函数赋值给变量)
  • LeetCode 第416场周赛个人题解
  • springbootweb集成swagger
  • 王道考研视频——操作系统笔记
  • 海外服务器哪个速度最快且性能稳定
  • GRE隧道在实际部署中的优化、局限性与弊端
  • 排序篇(七大基于比较的排序算法)
  • 华为全联接大会HC2024 观会感
  • QMT获取可转债行情数据方法介绍!支持QMT量化软件的券商平台?
  • Oracle(140)如何创建和管理数据库角色?
  • Android14 蓝牙启动流程
  • C++编程语言:基础设施:命名空间(Bjarne Stroustrup)
  • 基于微信小程序的购物系统+php(lw+演示+源码+运行)
  • App端测——稳定性测试
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O
  • 互联网技术的持续演进:从现在到未来
  • 开放的数据时代:Web3和个人隐私的未来
  • 自动化流程机器人(RPA)
  • 计算机图形学 中心画圆算法 原理及matlab代码实现