JSON 이스케이프 도구
JSON 문자열의 이스케이프 및 이스케이프 해제를 빠르게 처리합니다
변환 방식 선택
JSON 이스케이프란?
JSON 이스케이프는 JSON 문자열의 특수 문자를 이스케이프 시퀀스로 변환하는 과정입니다. 일반적인 이스케이프 문자로는: "는 \"로, \\는 \\\\로, 줄 바꿈 문자는 \n로, 탭 문자는 \t 등으로 변환됩니다.
사용 시나리오: JSON 문자열 내에 다른 JSON을 삽입하거나, 코드에서 JSON 문자열 상수를 정의하거나, 데이터베이스에 JSON 데이터를 저장할 때 이스케이프 처리가 필요합니다.
사용 방법
사용 방법
- 입력란에 텍스트를 붙여넣거나 입력하세요
- 'JSON Escape'를 클릭하여 특수 문자를 이스케이프하세요 (예: " → \")
- 'JSON Unescape'를 클릭하여 이스케이프된 문자를 복원하세요 (예: \" → ")
- 결과가 아래에 자동으로 표시되며 바로 복사할 수 있습니다
이스케이프 참고사항
- 대상 컨텍스트에 맞게 텍스트를 이스케이프하세요. JSON 문자열, JavaScript 소스, URL, HTML 속성은 각각 다른 이스케이프 규칙을 가집니다.
- 이스케이프 해제 후, 구성 파일에 붙여넣기 전에 줄 바꿈, 백슬래시, 따옴표를 확인하세요.
활용 사례
기술 원리
JSON(RFC 8259)은 엄격한 텍스트 문법입니다. 모든 문자열 리터럴은 ASCII 쌍따옴표(U+0022)로 감싸야 하며, 해당 문법을 깨뜨릴 수 있는 문자는 백슬래시 이스케이프로 표현해야 합니다. 필수 이스케이프 문자는: 쌍따옴표를 백슬래시-따옴표로, 백슬래시를 이중 백슬래시로, U+0000부터 U+001F까지의 32개 제어 문자(\b U+0008, \f U+000C, \n U+000A, \r U+000D, \t U+0009 포함)입니다. U+001F 이상의 문자는 CJK 한자, 이모지, 악센트 문자, 기타 보충 문자를 포함하여 원시 UTF-8 바이트 시퀀스로 문자열에 나타날 수 있습니다. 슬래시 문자는 이스케이프가 선택 사항(\/)이지만, JSON이 HTML <script> 태그 내에 포함될 경우 닫는 스크립트 태그 시퀀스가 주변 script 요소를 조기에 닫지 않도록 이스케이프하는 것이 관례입니다. 실제로 두 계층의 이스케이프가 사용됩니다. JSON 이스케이프(구문적 치환)는 RFC 8259이 요구하는 유일한 것으로, 문자열이 유효한 JSON임을 보장합니다. 유니코드 이스케이프(각 문자를 \uXXXX 또는 \u{XXXXX}로 다시 작성)는 표현 방식의 선택이지 구문적 요구 사항이 아닙니다. 바이트의 모양만 변경할 뿐 디코딩 결과는 동일합니다. CJK 텍스트는 원시 UTF-8 바이트 그대로 JSON에서 이미 유효합니다. 페이지의 유니코드 이스케이프 모드는 이를 \uXXXX로 다시 작성하며, Java 또는 JavaScript 소스 파일에 문자열을 넣을 때 멀티바이트 UTF-8을 처리해야 하는 주변 파서 문제를 해결하기 위해 유용하지만, 문자당 4~6바이트가 추가되고 가독성이 저하됩니다. 이스케이프 규칙에는 예외가 있습니다. JSON.parse는 선행 0(01은 JavaScript에서는 팔진수 1로 허용되지만 파싱 오류)에 엄격합니다. V8의 JSON.stringify는 항상 최소한의 이스케이프를 생성합니다(제어 문자는 가능하면 \b/\n/\r/\t/\f로, 그렇지 않으면 \uXXXX로, 그리고 슬래시 /, U+2028, U+2029는 사람이 읽을 수 있는 출력을 위해 원시 상태로 둠). 단일 서러게이트(낮은 서러게이트가 뒤따르지 않는 높은 서러게이트)는 RFC 8259에 따라 기술적으로 유효한 JSON이지만, strict 모드나 TypeScript의 JSON.parse는 이를 InvalidString으로 거부합니다. 페이지의 이스케이프 모드는 단일 서러게이트를 \uFFFD(대체 문자)로 교체하여 출력이 모든 표준 파서를 통과할 수 있도록 합니다. JavaScript 소스 코드 삽입을 위해 JSON 문자열에는 세 번째 이스케이프 계층이 필요합니다. JS 문자열 리터럴 내의 JSON은 백슬래시 자체를 이스케이프해야 합니다. 페이지의 JS 문자열 출력 모드는 이중 이스케이프를 추가하며, eval 또는 JSON.parse 버튼은 두 인코딩이 동일한 문자열로 디코딩됨을 보여줍니다. HTML 내 삽입 컨텍스트에는 네 번째 계층이 추가됩니다. <, >, &는 주변 페이지에서 HTML 엔티티 이스케이프가 필요하고, 속성 값은 따옴표 이스케이프도 필요합니다. HTML 내 JSON은 유명한 위험(위의 </script> 함정)이 있으므로 textContent 할당이나 <script type="application/json"> 블록으로의 JSON.stringify 같은 안전한 싱크를 사용하는 것이 좋습니다(나중에 script.textContent로 읽고, 절대 eval 사용 금지). JSON5(인기 있는 상위 집합)는 단일 따옴표 문자열, 여러 줄 문자열, 따옴표 없는 키, 후행 쉼표, NaN/Infinity, 한 줄 // 주석을 추가합니다. 이 페이지는 JSON5 출력을 생성하지 않습니다. 라운드트립이 필요하면 전용 라이브러리를 사용하세요.
- JSON 문자열(RFC 8259)은 쌍따옴표를 백슬래시-따옴표로, 백슬래시를 이중 백슬래시로, 32개 제어 문자 U+0000..U+001F(\b \f \n \r \t 및 나머지는 \uXXXX)를 이스케이프해야 합니다. U+001F 이상은 CJK, 이모지, 악센트 문자를 포함하여 원시 UTF-8로 유효합니다.
- '이스케이프'의 두 계층: JSON 이스케이프(구문적, 필수)는 문자열을 유효한 JSON으로 만듦. 유니코드 이스케이프(표현적)는 문자를 \uXXXX로 다시 작성하며 유효성이 아닌 가독성만 변경.
- 선택적 '/': JSON에서 /를 \/로 이스케이프 가능. 관례: HTML <script>에 JSON을 삽입할 때 닫는 스크립트 태그 시퀀스가 주변 태그를 닫지 않도록 이스케이프.
- CJK는 원시 UTF-8 JSON에서 이스케이프되지 않음: 예시 '你好'는 6바이트 원시 바이트. 페이지의 유니코드 이스케이프 모드는 소스 파일 사용을 위해 \u4f60\u597d로 다시 작성하여 가독성과 호환성을 교환.
- 단일 서러게이트: 낮은 서러게이트가 뒤따르지 않는 높은 서러게이트(U+D800..U+DBFF)는 RFC 8259에 따라 기술적으로 유효한 JSON이지만, strict 모드나 TypeScript의 JSON.parse는 거부. 페이지는 단일 서러게이트를 \uFFFD로 교체하여 출력이 strict 파서를 통과하도록 함.
- JSON.parse는 엄격: 선행 0(01)은 파싱 오류, NaN/Infinity는 유효한 리터럴이 아님, 후행 쉼표는 허용되지 않음. V8의 JSON.stringify는 항상 최소한의 이스케이프를 생성하고 가독성을 위해 슬래시 /와 U+2028/U+2029를 원시 상태로 둠.
- JSON-in-JS: JSON 문자열을 JS 문자열 리터럴에 삽입하려면 백슬래시를 두 배로. 페이지의 'JS 문자열' 출력은 해당 계층을 추가. 결과에 대한 eval은 JSON.parse와 동일한 문자열을 반환.
- JSON5 상위 집합: 단일 따옴표 문자열, 여러 줄 문자열, 따옴표 없는 키, 후행 쉼표, NaN/Infinity, 한 줄 // 주석. 페이지는 JSON5가 아닌 엄격한 RFC 8259 JSON을 생성.
예시
큰따옴표와 백슬래시가 포함된 문자열
입력: He said "Hello\World"
출력: He said \"Hello\\World\"줄바꿈과 탭이 포함된 문자열
입력: Line1\tIndent\nLine2
출력: Line1\tIndent\nLine2중국어와 큰따옴표가 포함된 문자열
입력: {"name": "Alice", "msg": "He said \"Hi\""}
출력: {\"name\": \"Alice\", \"msg\": \"He said \\\"Hi\\\"\"}자주 묻는 질문
JSON 문자열을 이스케이프한다는 게 무슨 뜻인가요?
입력을 따옴표로 감싸고 모든 특수 문자를 JSON에서 안전한 이스케이프 시퀀스로 바꿔 줍니다. " → \", \ → \\, 줄바꿈 → \n, 탭 → \t, 제어 문자 → \u00NN처럼요. 결과는 다른 JSON 문서나 코드 편집기에 그대로 붙여 넣을 수 있는 유효한 JSON 문자열 리터럴입니다.
이런 처리가 왜 필요한가요?
흔한 사례로는 JSON 설정 파일에 여러 줄 메시지를 넣어야 할 때, JSON 문자열을 명령줄 인자로 전달할 때, JSON 안에 또 JSON을 넣을 때(예: 본문이 다시 JSON 인코딩된 문자열인 API 요청), 사용자 입력을 로깅하기 전에 처리할 때 등이 있습니다.
이스케이프와 URL 인코딩은 같은 건가요?
아닙니다. JSON 이스케이프는 \n, \", \u00XX를 사용하고, URL 인코딩은 %20, %22, %0A를 사용합니다. 문법적 맥락이 다르고 이스케이프 규칙도 다릅니다. 도착지 형식에 맞는 방식을 사용하세요.
역이스케이프 모드는 모든 JSON 이스케이프를 처리하나요?
네, 모든 표준 이스케이프(\", \\, \/, \b, \f, \n, \r, \t, \uXXXX)를 지원합니다. U+FFFF를 넘는 코드 포인트의 서로게이트 페어(\uD83D\uDE00 = 😀)는 실제 이모지로 다시 합쳐집니다. 잘못된 이스케이프 시퀀스는 오류로 표시되어 수정할 수 있습니다.
문자열 이스케이프와 객체 stringify는 어떻게 다른가요?
이스케이프는 텍스트 한 덩어리를 따옴표로 감싼 JSON 문자열로 만들고, JSON.stringify 같은 stringify는 JavaScript 객체를 완전한 JSON 문서로 만듭니다. 이 페이지는 전자에 해당합니다. 후자는 코드 편집기에서 객체를 JSON으로 작성하거나 JSON 포매터를 사용하세요.
제어 문자는 항상 이스케이프되나요?
네, JSON이 그렇게 요구합니다. 줄바꿈, 탭, NULL을 비롯한 ASCII 제어 문자(0x00~0x1F)는 반드시 이스케이프해야 하며, 그렇지 않으면 결과 문자열은 유효한 JSON이 아닙니다. 일부 구현은 DEL(0x7F)이나 U+FFFF를 넘는 문자도 이스케이프하지만, 이 페이지는 RFC 8259를 엄격히 따릅니다.
데이터가 어딘가로 전송되나요?
아니요. 이스케이프와 역이스케이프는 브라우저 안에서 처리됩니다. 붙여 넣은 텍스트는 업로드되지 않습니다.