시스템끼리 통신할 때(특히 web 기반) JSON
포맷을 사용한다.
이 때 발신하는 측에서 직렬화stringify
가 발생하고 수신하는 측에서는 역직렬화parse
가 필요하다.
데이터를 수신하는 측에서 JSON을 다시 객체로 사용하기 위해 parse
하게 되는데 이 때 유효하지 않은 문자가 포함된 경우 parsing error가 발생한다.
따라서 데이터의 json에서 유효하지 않은 문자열을validation
, normalization
등 후처리 작업을 통해 처리해주어야 한다.
JSON에서 parsing 오류가 발생하는 경우는 다음과 같은 경우들이 대표적이다.
- JSON 문법에 맞지 않는 경우
- 인코딩 이슈
- 유효하지 않은 문자열이 포함된 경우 - 키와 밸류를 둘러싼 따옴표를 제외한 따옴표(")나 제어문자 등 출력문자가 아닌 문자 등 출처: geeksforgeeks
만약 JSON 문법에 맞지 않거나 인코딩 이슈가 발생하는 등 데이터 역직렬화에 심각한 지장이 있는 경우 validation
을 통해 예외를 리턴하는 것이 더 적절할 수 있지만 일부 문자열만 제거해주면 데이터 표현이 가능한 경우 normalization
을 통해 문자열을 직접 수정해주는 것도 좋은 방법일 수 있다.
제어문자는 아래 유니코드 표에서 U+0000부터 U+001F까지, U+007F부터 U+009F까지를 포함한다. 유니코드표 - 제어문자
자바에서는 간단하게 p{Cntrl}
와 같은 정규식으로 제어문자 체크가 가능하다.
private String getValidJsonString(String jsonString) {
//\p{Cntrl} : 제어문자, \" : 큰따옴표
return jsonString.replaceAll("[\\p{Cntrl}\"]", "");
}
그러나 위와 같이 표현할 경우 개행문자(\n)나 캐리지리턴(\r) 같은 문자들이 모두 삭제되므로 주의해야 한다.