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

如何将含嵌套JSON对象的CSV转换为指定格式JSON(基于Jackson)

如何用Jackson将含内嵌JSON的CSV转换为指定格式的JSON

需求场景

现有如下CSV内容:

header1,header2,header3
value1,value2,{"name":"John","age":30,"car":null}

需要将其转换为以下格式的JSON,要求第三列的内嵌JSON以转义后的字符串形式保留,而非解析为JSON对象:

{
  "header1": "value1",
  "header2": "value2",
  "header3": "{\"name\":\"John\",\"age\":30,\"car\":null}"
}

解决方案(基于Jackson CSV模块)

针对你当前的代码配置,需要调整两处核心设置,解决解析时分隔符冲突和结果格式问题:

1. 修正CsvSchema配置

为包含内嵌JSON的列指定LITERAL类型,确保解析器将该列的完整内容(包括内部逗号)作为单个字符串读取,避免被错误拆分:

CsvSchema schema = CsvSchema.builder()
    .setUseHeader(true)
    .addColumn("header1")
    .addColumn("header2")
    // 标记第三列为LITERAL类型,完整读取内嵌JSON内容
    .addColumn("header3", CsvSchema.ColumnType.LITERAL)
    .build();

2. 调整CsvMapper配置

关闭WRAP_AS_ARRAY特性(你当前开启了该特性,会导致输出数组而非键值对对象),保留IGNORE_TRAILING_UNMAPPABLE以兼容多余列的情况:

CsvMapper mapper = CsvMapper.builder()
    .enable(CsvParser.Feature.IGNORE_TRAILING_UNMAPPABLE)
    // 关闭WRAP_AS_ARRAY,生成以表头为键的JSON对象
    .disable(CsvParser.Feature.WRAP_AS_ARRAY)
    .build();

3. 完整转换示例代码

public class CsvToJsonExample {
    public static void main(String[] args) throws IOException {
        String csvContent = """
            header1,header2,header3
            value1,value2,{"name":"John","age":30,"car":null}
            """;

        // 构建Schema和Mapper
        CsvSchema schema = CsvSchema.builder()
            .setUseHeader(true)
            .addColumn("header1")
            .addColumn("header2")
            .addColumn("header3", CsvSchema.ColumnType.LITERAL)
            .build();

        CsvMapper mapper = CsvMapper.builder()
            .enable(CsvParser.Feature.IGNORE_TRAILING_UNMAPPABLE)
            .disable(CsvParser.Feature.WRAP_AS_ARRAY)
            .build();

        // 执行转换并输出格式化结果
        JsonNode resultNode = mapper.readerFor(JsonNode.class)
            .with(schema)
            .readValue(csvContent);

        String formattedJson = mapper.writerWithDefaultPrettyPrinter()
            .writeValueAsString(resultNode);

        System.out.println(formattedJson);
    }
}

关键说明

  • LITERAL列类型:解决CSV内嵌JSON中的逗号被误判为列分隔符的问题,确保整段JSON被作为单个字符串读取。
  • 关闭WRAP_AS_ARRAY:默认开启该特性会将每行CSV转为JSON数组,关闭后Jackson会根据表头生成键值对形式的JSON对象,匹配你的需求。
  • 转义处理:Jackson会自动将字符串中的双引号转义,最终输出符合要求的JSON格式。

内容的提问来源于stack exchange,提问作者Vaibhav Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:00:50