Java读取CSV文件并写入JSON文件及代码修改技术咨询
Java读取CSV文件并写入JSON文件的完整实现方案
你当前的代码里还在使用CSVWriter,但你的需求是把CSV数据转换成JSON格式写入文件对吧?我来帮你调整代码,完成整个CSV转JSON的流程,同时梳理关键细节。
第一步:确认依赖
你用到了CSVReader,这是OpenCSV库的类;另外转JSON我们用Jackson(Java生态最常用的JSON处理库),所以先确保你的项目引入了这两个依赖:
Maven依赖
<!-- OpenCSV 用于读取CSV --> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.6</version> </dependency> <!-- Jackson 用于JSON序列化 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
Gradle依赖
implementation 'com.opencsv:opencsv:5.6' implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
第二步:完整代码实现
下面是修正后的完整代码,我会把你写的部分整合进去,替换掉CSVWriter的部分,改成JSON写入逻辑:
import com.opencsv.CSVReader; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CsvToJsonConverter { private static final String SAMPLE_CSV_FILE_PATH = "src/main/resources/testCSV.csv"; private static final String OUTPUT_JSON_PATH = "src/main/resources/output.json"; public static void main(String[] args) throws IOException { // 1. 读取CSV文件,用try-with-resources自动关闭资源 try (CSVReader csvReader = new CSVReader(new FileReader(SAMPLE_CSV_FILE_PATH))) { List<String[]> records = csvReader.readAll(); if (records.isEmpty()) { System.out.println("CSV文件为空,无需转换"); return; } // 2. 处理表头和数据行:把CSV行转成键值对Map String[] headers = records.get(0); // 第一行作为JSON对象的key List<Map<String, String>> jsonDataList = new ArrayList<>(); // 从第二行开始遍历数据行 for (int i = 1; i < records.size(); i++) { String[] row = records.get(i); Map<String, String> rowMap = new HashMap<>(); // 关联表头和对应列的数据 for (int j = 0; j < headers.length; j++) { rowMap.put(headers[j], j < row.length ? row[j] : ""); } jsonDataList.add(rowMap); } // 3. 序列化JSON并写入文件 ObjectMapper objectMapper = new ObjectMapper(); // 开启JSON格式化输出,方便阅读;如果追求性能可以关闭这行 objectMapper.enable(SerializationFeature.INDENT_OUTPUT); objectMapper.writeValue(new FileWriter(OUTPUT_JSON_PATH), jsonDataList); System.out.println("CSV转JSON完成!文件路径:" + OUTPUT_JSON_PATH); } } }
第三步:关键细节说明
- 表头自定义:如果你的CSV没有表头,可以手动定义key数组替换
headers变量,比如String[] headers = {"姓名", "年龄", "邮箱"};。 - CSV分隔符适配:如果你的CSV用分号、制表符等非逗号分隔,用
CSVReaderBuilder指定分隔符:CSVReader csvReader = new CSVReaderBuilder(new FileReader(SAMPLE_CSV_FILE_PATH)) .withSeparator(';') // 替换成你的分隔符 .build(); - 异常优化:当前代码把
IOException抛给main方法,生产环境建议添加针对性捕获(比如文件不存在、权限不足等),给出更友好的错误提示。 - 数据类型转换:如果需要把CSV里的数字(比如年龄)转成JSON的数值类型,可以在遍历row的时候做类型转换,比如
rowMap.put("age", Integer.parseInt(row[j]));(注意处理格式异常)。
测试示例
假设你的testCSV.csv内容是:
name,age,email Alice,25,alice@example.com Bob,30,bob@example.com
运行代码后,output.json会生成格式化后的JSON数组:
[ { "name" : "Alice", "age" : "25", "email" : "alice@example.com" }, { "name" : "Bob", "age" : "30", "email" : "bob@example.com" } ]
内容的提问来源于stack exchange,提问作者LOTR94
相关产品推荐
相关产品推荐

