준호씨의 블로그

Jackson - Json String Escape 본문

개발이야기

Jackson - Json String Escape

준호씨 2020. 8. 13. 00:45
반응형

가끔 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\"}

 

반응형
Comments