Как ESCAPE символ разделителя в библиотеке Jackson-dataformat-csv?

Мой вариант использования заключался в преобразовании 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, "Flash", "Barry, Allen", "DC");

Ожидаемый выход: 1,Flash,"Барри \, Аллен",DC

Выходной я получаю: 1,Flash,"Барри, Аллен",DC

Может кто-то указать, что я делаю не так?

1 ответ

Ваш вывод правильный, в CSV, когда вы окружаете объект или элемент двойными кавычками, он пишется как есть, поэтому "Flash" пишется без кавычек, а "Barry,Allen" пишется с кавычками в выводе, поэтому разделитель уже сбежал и не должен выходить с обратной косой черты.

EDIT / UPDATE

После прочтения документации, представленной на github, в следующей строке показано, что генератор использует только двойные кавычки, а escape используется только для анализа.

escapeChar (int) [default: -1 означает "none"]: символ, если есть, используемый для экранирования значений. Чаще всего определяется как обратный слеш ('\'). Используется только парсером; Генератор использует только кавычки, включая удвоение кавычек, чтобы указать саму кавычку.

Другие вопросы по тегам