java - 如何转义 Jackson-dataformat-csv 库中的分隔符?

标签 java csv jackson jackson-dataformat-csv csvtoarray

我的用例是将 Java POJO 转换为字符串,以便可以将其传递并发布到 AWS Kinesis Firehose Stream。

我正在编写这个convertToString(),但我无法找到转义分隔符的正确方法。

public <T> List<String> convertToString(List<T> objectList, Class<T> tClass) {

        List<String> stringList = new ArrayList<>();
        char delimiter = ',';
        char escape = '\\';

        CsvMapper mapper = new CsvMapper();
        CsvSchema schema = mapper.schemaFor(tClass);

        for (T object : objectList ) {
            try{
                stringList.add(mapper.writer(schema.withColumnSeparator(delimiter).withEscapeChar(escape))
                        .writeValueAsString(object));
            } catch (JsonProcessingException e) {
                System.out.println("Exception : " + e);
            }
        }

        return stringList;
}

Input : SuperHero flash = new SuperHero(1, "Flash", "Barry , Allen", "DC");

Expected Output : 1,Flash,"Barry \, Allen",DC

Output I'm getting : 1,Flash,"Barry , Allen",DC

有人能指出我做错了什么吗?

最佳答案

您的输出是正确的,在 CSV 中,当您用双引号引起来的对象或元素时,它会按原样写入,因此“Flash”在输出中不带引号写入,而“Barry ,Allen”在输出中带引号写入,因此分隔符已经转义,不需要用反斜杠转义。

编辑/更新

阅读 github 上提供的文档后,下面一行显示生成器仅使用双引号,转义仅用于解析。

escapeChar (int) [default: -1 meaning "none"]: character, if any, used to escape values. Most commonly defined as backslash ('\'). Only used by parser; generator only uses quoting, including doubling up of quotes to indicate quote char itself.

关于java - 如何转义 Jackson-dataformat-csv 库中的分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490518/

相关文章:

json - 使用 Jackson 序列化(反)序列化 Kotlin 委托(delegate)属性

java - 当value1的java类依赖于value2时,如何使用jackson反序列化JSON

java - 类 xxx 中的构造函数 xxx 不能应用于给定类型;

java - 用java编写的C编译器

python - 在 python 中读取包含特殊字符的逗号分隔文本文件

java - hibernate 为从 mysql 自动生成的时间戳返回 null

java - 使用 Spring Data 和 MongoDB 解析子文档类型

java - LeanFT & Java : Run tests in Docker containers

mysql - 如何使用 MySQL 中的 SQL 语句将包含大量日期列的 CSV 导入到表中?

python - 在不删除逗号的情况下将数据帧写入 csv