ToolDeck

JSON 문자열 이스케이프

JSON 문자열의 특수 문자 이스케이프 및 이스케이프 해제

예시 시도

입력

출력

로컬에서 실행 · 시크릿 붙여넣기 안전
결과가 여기에 표시됩니다…

JSON 문자열 이스케이프란?

JSON 문자열 이스케이프는 문자열 내부의 특수 문자를 JSON 파서가 구조를 깨뜨리지 않고 읽을 수 있는 이스케이프 시퀀스로 변환하는 과정입니다. JSON 명세(ECMA-404 / RFC 8259)는 문자열 값 내의 특정 문자 앞에 백슬래시를 붙이도록 요구합니다. 올바른 이스케이프 처리가 없으면, 문자열 내부의 리터럴 큰따옴표나 줄 바꿈이 문자열을 조기에 종료시켜 파싱 오류를 일으킵니다.

모든 JSON 문자열은 큰따옴표로 구분됩니다. 문자열 자체에 큰따옴표, 백슬래시, 또는 제어 문자(U+0000~U+001F)가 포함되어 있으면 해당 문자를 이스케이프 시퀀스로 대체해야 합니다. 예를 들어 리터럴 줄 바꿈은 \n, 탭은 \t, 큰따옴표는 \"가 됩니다. 모든 유니코드 코드 포인트는 \uXXXX 형식으로도 표현할 수 있으며, 여기서 XXXX는 네 자리 16진수 값입니다.

이스케이프 해제(역 연산)는 백슬래시 시퀀스를 원래 문자로 되돌립니다. JSON 페이로드에서 문자열 값이 이중으로 이스케이프된 경우, 또는 UI나 터미널에 표시하기 위해 JSON 로그 항목에서 원시 텍스트를 추출해야 할 때 사용합니다. 로그 집계 파이프라인에서 이 상황이 자주 발생합니다. JSON으로 인코딩된 메시지가 다른 JSON 문서 내부의 문자열 값으로 저장되면, 내부 문자열의 모든 백슬래시가 두 배로 늘어납니다.

JSON 이스케이프 도구를 사용하는 이유

백슬래시를 수동으로 추가하거나 제거하는 작업은, 특히 여러 줄 텍스트, 파일 경로, 또는 삽입된 코드 스니펫을 다룰 때 지루하고 오류가 발생하기 쉽습니다. 전용 이스케이프 도구는 수동 편집 시 놓치기 쉬운 엣지 케이스를 잡아냅니다.

🔒
개인정보 우선 처리
문자열이 브라우저 밖으로 전송되지 않습니다. 모든 이스케이프 및 이스케이프 해제는 서버 호출 없이 JavaScript로 로컬에서 실행되므로, API 키나 토큰 같은 민감한 데이터가 기기에 머뭅니다.
즉시 변환
텍스트를 붙여넣으면 밀리초 내에 올바르게 이스케이프된 JSON 출력을 얻을 수 있습니다. 원격 서버 왕복을 기다릴 필요가 없습니다.
🛡️
계정 또는 설치 불필요
페이지를 열고 이스케이프를 시작하세요. 회원가입 양식도, 브라우저 확장도, 설치할 CLI 도구도 없습니다. 최신 브라우저가 있는 모든 기기에서 작동합니다.
📋
전체 문자 지원
JSON에서 필요한 모든 이스케이프를 처리합니다: 큰따옴표, 백슬래시, 제어 문자(U+0000~U+001F), 이모지와 CJK 문자를 포함한 유니코드 시퀀스.

JSON 문자열 이스케이프 사용 사례

프런트엔드 개발
fetch 또는 XMLHttpRequest를 통해 전송되는 JSON 페이로드에 삽입하기 전에 사용자 생성 콘텐츠를 이스케이프합니다. 사용자가 따옴표, 줄 바꿈, 이모지를 입력할 때 잘못된 형식의 요청을 방지합니다.
백엔드 API 작업
문자열을 자동으로 이스케이프하지 않는 언어(셸 스크립트, SQL 저장 프로시저, 템플릿 엔진)에서 JSON 응답 본문을 작성합니다. 원시 문자열을 붙여넣고 이스케이프된 버전을 복사하세요.
DevOps 및 설정
Terraform, CloudFormation, Kubernetes ConfigMap용 JSON 설정 파일에 여러 줄의 인증서 PEM 블록, SSH 키, 또는 셸 스크립트를 JSON 구조를 깨뜨리지 않고 삽입합니다.
QA 및 테스트
탭, 널 바이트, 유니코드 서로게이트 쌍, 중첩된 이스케이프 문자열 등 엣지 케이스 문자를 포함하는 테스트 픽스처를 생성합니다. 파서가 이를 올바르게 처리하는지 검증하세요.
데이터 엔지니어링
Elasticsearch, CloudWatch, 또는 Datadog에서 이중으로 이스케이프된 로그 항목을 정리합니다. 문자열을 이스케이프 해제하여 분석이나 재수집을 위한 원본 메시지를 복원합니다.
JSON 학습
JSON 명세에 따라 어떤 문자가 이스케이프를 필요로 하는지 정확히 확인합니다. ECMA-404를 학습 중이거나 자체 JSON 파서를 개발하는 개발자에게 유용합니다.

JSON 이스케이프 시퀀스 참조

JSON 명세는 정확히 두 개의 필수 이스케이프(큰따옴표와 백슬래시)와 일반 제어 문자용 여섯 개의 짧은 이스케이프 시퀀스를 정의합니다. 기타 모든 제어 문자(U+0000~U+001F)는 \uXXXX 형식을 사용해야 합니다. U+FFFF 이상의 문자(이모지 등)는 UTF-16 서로게이트 쌍으로 표현할 수 있습니다: \uD83D\uDE00.

문자설명이스케이프 형식
"Double quote\"
\Backslash\\
/Forward slash\/ (optional)
\nNewline (LF)\n
\rCarriage return\r
\tTab\t
\bBackspace\b
\fForm feed\f
U+0000–U+001FControl characters\u0000–\u001F
U+0080+Non-ASCII (e.g. emoji)\uXXXX or raw UTF-8

JSON 이스케이프 vs. JSON 인코딩

개발자들은 때때로 문자열 이스케이프와 전체 JSON 문서 인코딩을 혼동합니다.

문자열 이스케이프
JSON 문자열 값 내부의 텍스트를 대상으로 합니다. 특수 문자를 백슬래시 시퀀스로 대체하여 큰따옴표 안에서 문자열이 유효하게 유지되도록 합니다. 입력: 원시 텍스트. 출력: 이스케이프된 텍스트(유효한 JSON이 되려면 여전히 주변에 따옴표가 필요합니다).
JSON 인코딩(직렬화)
전체 데이터 구조(객체, 배열, 숫자, 불리언, 널)를 JSON 텍스트 표현으로 변환합니다. 문자열 이스케이프는 이 더 큰 과정 안의 한 단계입니다. 입력: 데이터 구조. 출력: 완전한 JSON 문서.

코드 예제

모든 주요 언어에는 이를 위한 내장 함수가 있습니다. JavaScript, Python, Go, jq 예제:

JavaScript (browser / Node.js)
// JSON.stringify escapes a value and wraps it in quotes
JSON.stringify('Line 1\nLine 2')       // → '"Line 1\\nLine 2"'

// To get just the inner escaped string (no surrounding quotes):
const escaped = JSON.stringify('She said "hello"').slice(1, -1)
// → 'She said \\"hello\\"'

// Parsing reverses the escaping
JSON.parse('"tabs\\tand\\nnewlines"')  // → 'tabs\tand\nnewlines'

// Handling Unicode: emoji in JSON
JSON.stringify('Price: 5\u20ac')       // → '"Price: 5\u20ac"' (raw euro sign)
Python
import json

# json.dumps escapes and quotes a string
json.dumps('Line 1\nLine 2')           # → '"Line 1\\nLine 2"'

# Ensure ASCII: replace non-ASCII with \uXXXX sequences
json.dumps('Caf\u00e9', ensure_ascii=True)   # → '"Caf\\u00e9"'

# Keep UTF-8 characters as-is (default in Python 3)
json.dumps('Caf\u00e9', ensure_ascii=False)  # → '"Caf\u00e9"'

# Unescape by round-tripping through json.loads
json.loads('"She said \\"hello\\""')      # → 'She said "hello"'
Go
package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// json.Marshal escapes a Go string for JSON
	raw := "Line 1\nLine 2\tindented"
	b, _ := json.Marshal(raw)
	fmt.Println(string(b))
	// → "Line 1\nLine 2\tindented"

	// Unescape with json.Unmarshal
	var out string
	json.Unmarshal([]byte(`"She said \"hello\""`), &out)
	fmt.Println(out)
	// → She said "hello"
}
CLI (jq)
# Escape a raw string into a JSON-safe value
echo 'Line 1
Line 2	with tab' | jq -Rs '.'
# → "Line 1\nLine 2\twith tab\n"

# Unescape a JSON string back to raw text
echo '"She said \"hello\""' | jq -r '.'
# → She said "hello"

자주 묻는 질문

JSON 문자열에서 반드시 이스케이프해야 하는 문자는 무엇인가요?
JSON 명세(RFC 8259)는 큰따옴표(\"), 백슬래시(\\), 그리고 U+0000~U+001F 범위의 모든 제어 문자를 이스케이프할 것을 요구합니다. 슬래시(/)는 \/로 이스케이프할 수 있지만 선택 사항입니다. 비ASCII 텍스트와 이모지를 포함한 다른 모든 유니코드 문자는 문서가 UTF-8 인코딩을 사용하는 한 이스케이프 없이 그대로 사용할 수 있습니다.
JSON 이스케이프와 JSON stringify의 차이점은 무엇인가요?
JavaScript의 JSON.stringify()는 전체 JavaScript 값을 JSON 문자열로 직렬화하며, 주변에 큰따옴표를 추가하고 내부의 특수 문자를 이스케이프합니다. JSON 이스케이프는 특수 문자를 백슬래시 시퀀스로 교체하는 문자 수준의 작업을 의미합니다. 문자열에 JSON.stringify()를 호출하면 직렬화 과정의 일부로 이스케이프가 수행됩니다.
JSON에서 줄 바꿈을 어떻게 이스케이프하나요?
리터럴 줄 바꿈 문자(U+000A)를 두 문자 시퀀스 \n으로 대체합니다. 마찬가지로 캐리지 리턴(U+000D)은 \r이 됩니다. JavaScript의 JSON.stringify()나 Python의 json.dumps()를 사용하면 이러한 대체가 자동으로 이루어집니다.
JSON 문자열이 이중으로 이스케이프되는 이유는 무엇인가요?
이중 이스케이프는 문자열이 두 번 직렬화될 때 발생합니다. 예를 들어 이스케이프 시퀀스가 이미 포함된 문자열에 JSON.stringify()를 호출하면 백슬래시가 다시 이스케이프됩니다: \n이 \\n이 됩니다. 이를 해결하려면 재직렬화 전에 JSON.parse()로 문자열을 한 번 파싱하거나, 파이프라인에서 중복 인코딩 단계를 확인하세요.
JSON 문자열에 작은따옴표를 사용할 수 있나요?
아니요. JSON 명세는 모든 문자열 값과 속성 이름에 큰따옴표를 요구합니다. 작은따옴표는 유효한 JSON이 아니며 파싱 오류를 일으킵니다. 원본 데이터에 작은따옴표가 포함된 경우, JSON 큰따옴표 문자열 내부에서 작은따옴표는 일반 문자이므로 이스케이프할 필요가 없습니다.
JSON에 이스케이프되지 않은 UTF-8 문자를 넣어도 안전한가요?
네, JSON 문서가 RFC 8259에서 기본값이자 권장 인코딩으로 지정한 UTF-8로 인코딩되어 있는 한 안전합니다. 악센트 문자, CJK 한자, 이모지는 \uXXXX 이스케이프 없이 문자열에 직접 나타날 수 있습니다. 일부 구형 시스템은 ASCII 전용 JSON을 기대하므로, 이 경우 Python의 ensure_ascii 옵션이나 해당 언어의 유사한 플래그를 사용하세요.
JSON에서 이모지를 어떻게 이스케이프하나요?
U+FFFF 이상의 이모지는 JSON에서 UTF-16 서로게이트 쌍으로 표현됩니다. 예를 들어 웃는 얼굴(U+1F600)은 \uD83D\uDE00이 됩니다. 대부분의 직렬라이저가 이를 자동으로 처리합니다. JSON을 직접 작성하거나 도구가 기본 다국어 평면만 지원하는 경우 서로게이트 쌍 표기법을 사용하세요. 그렇지 않으면 이모지를 UTF-8 문자로 직접 포함하면 됩니다.