Java8实现CSV转JSON功能现有代码运行异常,求排查解决思路
问题排查与解决思路
核心错误点
你的代码存在4个致命逻辑错误,导致无法输出正确结果:
- 未读取CSV文件内容:你直接把文件路径字符串传入转换方法,根本没有读取CSV的实际内容,处理的对象从根上就错了
- 行拆分逻辑错误:你用逗号直接拆分整个输入串,而非先按换行符拆分得到每行数据,完全打乱了CSV的行结构
- 字段拆分逻辑错误:你使用CSV里不存在的特殊字符
۞拆分字段,还提前删除了所有逗号,根本无法正确拆分每行的三个字段 - 边界处理风险:手动拼接JSON的逻辑有概率生成多余逗号,不符合JSON语法规范
修正后的实现代码
package com.beandependencyinjection.configurationbeans.service; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class ConvertCsvToJson { public static void main(String[] args) throws IOException { String filePath = "C:\\products\\swproduct.csv"; // 先读取CSV文件的实际内容 String csvContent = Files.readString(Paths.get(filePath)); ConvertCsvToJson converter = new ConvertCsvToJson(); System.out.println(converter.CSVtoJSON(csvContent)); } public String CSVtoJSON(String csvContent) { // 按换行符拆分得到所有行,兼容Windows、Linux、Mac的换行格式 String[] lines = csvContent.split("\\R"); if (lines.length == 0) return "[]"; StringBuilder builder = new StringBuilder(); builder.append('['); // 第一行是表头,按逗号拆分后去空格 String[] headers = lines[0].trim().split(","); // 从第二行开始遍历数据行 for (int i = 1; i < lines.length; i++) { String currentLine = lines[i].trim(); if (currentLine.isEmpty()) continue; // 跳过空行 // 拆分当前行的字段 String[] values = currentLine.split(","); builder.append('{'); for (int j = 0; j < headers.length; j++) { // 拼接键值对,自动处理行字段不足的场景 builder.append("\"").append(headers[j].trim()).append("\":\"") .append(j < values.length ? values[j].trim() : "").append("\""); if (j != headers.length - 1) { builder.append(','); } } builder.append('}'); if (i != lines.length - 1) { builder.append(','); } } builder.append(']'); return builder.toString(); } }
优化建议
如果是生产环境使用,推荐直接用成熟的第三方库处理,避免手动处理的边界问题:
- CSV解析用
OpenCSV,可以自动处理字段含逗号、引号、换行等特殊字符的场景 - JSON序列化用
Jackson或Gson,不用手动拼接字符串,完全避免JSON语法错误
内容的提问来源于stack exchange,提问作者Indranil
相关产品推荐
相关产品推荐

