文章目录
- 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");}}}}}