Java POJOをStringに変換してAWS Kinesis Firehose Streamに公開することができました。Jackson-dataformat-csvライブラリの区切り文字をESCAPEする方法は?
私はこの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;
}
入力:スーパーヒーローフラッシュ=新しいスーパーヒーロー(1、 "フラッシュ"、 "バリー・アレン"、 "DC")。
予想される出力:1、フラッシュ、 "バリー・アレン" を、DC
誰かが何を指すことができます:私は取得しています1、フラッシュ、 "バリー\、アレン"、DC
出力私は間違っている?
私はフィールド値に私の区切り文字をエスケープするに興味があるので、それは単一のフィールドとしてカウントすることができます。これを達成する方法はありますか? – dushyantashu
これは既に1つのフィールドとしてカウントされています。出力に "Barry、Allen"だけが二重引用符で囲まれている場合、これは単一フィールドであることを意味します。その出力を.csvファイルに保存してExcelで開き、結果を確認すると、 "Barry、Allen"は二重引用符を表示しない1つのフィールドになります。二重引用符で囲まれたフィールドを囲むと、エスケープする必要のある二重引用符以外の文字がエスケープされます。 –
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