如何在Jackson-dataformat-csv库中使用ESCAPE分隔符?

时间:2017-01-05 16:56:13

标签: java csv jackson jackson-dataformat-csv csvtoarray

我的用例是将Java POJO转换为String,以便将其传递给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;
}
  

输入:SuperHero flash =新的SuperHero(1,&#34; Flash&#34;,&#34; Barry,Allen&#34;,   &#34; DC&#34);

     

预期输出:1,Flash,&#34; Barry \,Allen&#34;,DC

     

输出我得到:1,Flash,&#34; Barry,Allen&#34;,DC

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

1 个答案:

答案 0 :(得分:1)

您的输出是正确的,当您用双引号括起一个对象或元素时它是按原样编写的,因此“Flash”没有引号,而“Barry,Allen”在输出中写有引号,因此分隔符已经被转义,不需要使用反斜杠进行转义。

修改/更新

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

  

escapeChar(int)[默认值:-1表示“无”]:用于转义值的字符(如果有)。最常见的定义为反斜杠('\')。仅供解析器使用;生成器只使用引用,包括加上引号以指示引号char本身。