준호씨의 블로그
Jackson - Json String Escape 본문
가끔 json 정보를 직접 만들 때가 있습니다. 그런데 문자열 값을 만들려면 큰따옴표 안에 또 큰따옴표를 입력해야 하는데요.
아래처럼 그냥 만들다 보면 json 구조가 깨져서 나중에 json파싱 할 때 오류가 발생합니다.
{
"lastName": "홍",
"extra": "{"type":"BIG"}"
}
json 문자열 값에 큰따옴표를 사용하려면 아래처럼 해야 됩니다.
{
"lastName": "홍",
"extra": "{\"type\":\"BIG\"}"
}
큰따옴표 앞에 역 슬래쉬(\)를 넣어 주었는데요. 이렇게 하면 나중에 실제로 값을 꺼낼 때는 역 슬래쉬를 지우고 큰따옴표만 사용하게 됩니다.
큰따옴표 외에도 역 슬래쉬, 개행, 탭 등 몇 가지 특수 문자들은 escape처리를 해 주어야 하는데요. 직접 손으로 하다 보면 실수할 수도 있기 때문에 라이브러리의 힘을 빌리는 게 좋습니다.
이번에는 Jackson라이브러리의 기능을 이용해서 문자열을 json에서 사용할 수 있도록 escape 처리하는 방법을 알아보겠습니다.
json 자체가 큰따옴표가 많이 들어가기 때문에 json 문자열을 먼저 만들어서 그걸 escape 해 보겠습니다.
아래 코드를 봅시다.
Map<String, Object> message = new HashMap<>();
message.put("type", "BIG");
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(message);
System.out.println(s); // {"type":"BIG"}
{"type":"BIG"}
문자열이 생성됩니다.
이걸 json문자열 값으로 사용할 수 있도록 escape 해 보겠습니다. JsonStringEncoder을 이용하면 됩니다. 인스턴스를 생성하고 quoteAsString 메서드를 이용합니다.
JsonStringEncoder encoder = JsonStringEncoder.getInstance();
char[] escapedJson = encoder.quoteAsString(s);
System.out.println(escapedJson); // {\"type\":\"BIG\"}
아래처럼 큰따옴표 앞에 역슬래시가 붙어서 escape처리가 된 것을 볼 수 있습니다.
{\"type\":\"BIG\"}
살짝 특이한 점은 char[]로 리턴되기 때문에 println에서는 알아서 잘 처리해 주지만 String값을 저장하려면 String으로 변환해 주어야 합니다.
아래의 방법을 이용해서 String으로 변환할 수 있습니다.
// char[] to String
System.out.println(String.valueOf(escapedJson)); // {\"type\":\"BIG\"}
System.out.println(new String(escapedJson)); // {\"type\":\"BIG\"}
'개발이야기' 카테고리의 다른 글
Java - D-Day 구하기. Java8이상 버전과 이전 버전 방식 (0) | 2020.08.22 |
---|---|
Java - OffsetDateTime 문자열 날짜 파싱 (0) | 2020.08.21 |
Java - distinct. 중복값 제거하기. 고윳값 구하기 (0) | 2020.08.07 |
메시지 전달 서비스 프로젝트 작명하기 (0) | 2020.08.05 |
분산 메시징 시스템 카프카(Kafka)의 간단한 역사와 이름의 의미 (0) | 2020.08.03 |