2017-01-05 19 views
0

Java POJO를 String으로 변환하여 AWS Kinesis Firehose Stream에 게시되도록 전달할 수있었습니다.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; 
} 

입력 : 슈퍼 플래시 새로운 슈퍼 = (1, "플래시", "배리 알렌" "DC");

예상 출력 : 1, 플래시, "배리 \ 알렌", DC는 내가 갖는

출력 : 1, 플래시, "배리, 알렌", DC는

누군가가 어떤 지점 수 내가 잘못하고있어?

답변

1

출력 내용이 정확합니다. 객체 나 요소를 큰 따옴표로 묶으면 출력됩니다. 따라서 "Flash"는 따옴표없이 쓰여지고 "Barry, Allen"은 출력에 따옴표로 쓰여지고, 따라서 구분 기호는 이미 이스케이프 처리되어 있으므로 백 슬래시로 이스케이프 할 필요가 없습니다.

EDIT/UPDATE

github에 제공된 설명서를 읽은 후, 다음 줄은 발전기는 따옴표를 사용하여 표시하고 탈출은 분석에 사용됩니다.

escapeChar (기본값 : -1은 "none"을 의미합니다.) : 값이 있으면 이스케이프 값으로 사용됩니다. 가장 일반적으로 백 슬래시 ('\')로 정의됩니다. 파서에만 사용됩니다. 생성자는 따옴표 자체를 나타내는 따옴표를 두 배로 만드는 것을 포함하여 따옴표 만 사용합니다.

+0

필자는 필드 값에서 내 구분 기호를 이스케이프 처리하는 데 관심이 있으므로 단일 필드로 계산할 수 있습니다. 이것을 달성 할 수있는 방법이 있습니까? – dushyantashu

+0

이미 하나의 필드로 계산됩니다. 출력에서 ​​"Barry, Allen"이 큰 따옴표를 사용하는 경우 이는 단일 필드임을 의미합니다. 출력을 .csv 파일로 저장하고 Excel에서 열어 결과를 볼 수 있습니다. 그러면 "Barry, Allen"이 큰 따옴표를 표시하지 않고 하나의 필드로 나타납니다. 이중 따옴표가있는 필드를 감싸면 문자를 이스케이프합니다. 따옴표 만 이스케이프하면됩니다. –

+0

csv의 경우 작동하지만 AWS 키네시스 구분 기호는 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