Как 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"]: символ, если есть, используемый для экранирования значений. Чаще всего определяется как обратный слеш ('\'). Используется только парсером; Генератор использует только кавычки, включая удвоение кавычек, чтобы указать саму кавычку.