You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:11:41