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");
                }
            }
        }
    }

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部