Моим вариантом использования было преобразование Java POJO в String, чтобы оно могло быть передано для публикации в AWS Kinesis Firehose Stream.Как символ разделителя ESCAPE в библиотеке Jackson-dataformat-csv?
Я писал это 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 вспышка = новый SuperHero (1, "Flash", "Барри Аллен", "DC");
Ожидаемый результат: 1, Flash, "Барри \ Аллен", DC
выход я получаю: 1, Flash, "Барри Аллен", DC
Может кто-то указать, что Я поступаю неправильно?
Я заинтересован в том, чтобы ускользнуть от моего разделителя в поле, поэтому его можно считать единственным полем. Есть ли способ достичь этого? – dushyantashu
Он уже считается единственным полем. Если вы заметили, что на вашем выходе только «Барри, Аллен» имеет двойные кавычки, это означает, что это одно поле. Вы можете сохранить этот вывод в CSV-файл и открыть его в excel, чтобы увидеть результат, и вы обнаружите, что «Barry, Allen» - это одно поле, не отображающее двойные кавычки. Окружение поля с двойными кавычками ускоряет символы внутри, за исключением двойных кавычек, которые нужно только экранировать. –
Для csv это работает, но разделитель AWS Kinesis должен быть экранирован для публикации в Redshift. Проверьте это: http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-data-with-the-escape-option, поэтому я искал обходной путь. – dushyantashu