JSONObject.toJSONString 이슈

dropKick·2024년 7월 16일

개발 이슈

목록 보기
11/14

개요

✅ JSONObject.toJSONString()을 사용하여 JSON 문자열을 생성 시, 자동으로 이스케이프 처리되어 BASE64 인코딩 시 문자열이 깨지는 현상 확인

원인

  • toJSONString() 내부에서 escape()를 호출하여, JSON 값이 null 또는 빈 문자열이 아니면 자동으로 이스케이프 처리
  • JSON에 포함된 특수 문자가 자동으로 변환되면서 BASE64 오류 발생

코드

import org.json.simple.JSONObject;

public class JsonEscapeIssue {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("data", "Hello \"World\"");

        String jsonString = jsonObject.toJSONString();
        System.out.println("JSON String: " + jsonString);

        String base64Encoded = java.util.Base64.getEncoder().encodeToString(jsonString.getBytes());
        System.out.println("BASE64 Encoded: " + base64Encoded);
    }
}

출력

BASE64 Encoded: eyJkYXRhIjoiSGVsbG8gXCJXb3JsZFwiIn0=

해결

  • ObjectMapper.writeValueAsString() 사용

코드

String jsonString = objectMapper.writeValueAsString(jsonData);

출력

BASE64 Encoded: eyJkYXRhIjoiSGVsbG8gIldvcmxkIiJ9
profile
안아줘요

0개의 댓글