이스케이프 해제란
JSON을 문자열 안에 저장하면 큰따옴표는 모두 \", 줄바꿈은 \n, 백슬래시는 \\로 쓰입니다. 로그 파일, 메시지 큐, 웹훅 페이로드, 브라우저 개발자 도구, JSON을 텍스트로 저장하는 데이터베이스 컬럼에서 자주 보는 모습입니다. 올바른 값이지만 읽기는 어렵습니다.
"{\"name\":\"Ada\",\"tags\":[\"admin\",\"dev\"]}"
JSON 이스케이프 해제(unstringify)는 이 이스케이프를 되돌려 원래 값을 돌려줍니다. 그 값이 JSON이면 이 도구가 읽기 좋게 정리까지 해 줍니다.
사용 방법
- 왼쪽 입력란에 이스케이프된 문자열을 붙여넣거나, 파일 열기 또는 예시를 누릅니다.
- 입력하는 동안 오른쪽에 결과가 나타납니다.
- 옵션을 정합니다.
- 중첩 문자열까지 해제는 결과가 또 다른 이스케이프된 문자열이면 계속 풉니다. 기본으로 켜져 있습니다.
- 결과가 JSON이면에서는 들여쓰기를 공백 2칸이나 4칸으로 할지, 그대로 두기로 할지 고릅니다.
- 복사를 누르거나, 다운로드로 결과를 텍스트 파일로 저장합니다.
입력란 아래 줄에는 결과가 올바른 JSON인지, 몇 겹의 이스케이프를 풀었는지가 표시됩니다.
예시
위의 문자열을 결과가 JSON이면을 공백 2칸으로 두고 변환하면 다음과 같습니다.
{
"name": "Ada",
"tags": [
"admin",
"dev"
]
}
바깥 따옴표가 없는 이스케이프 텍스트도 됩니다. 이 입력은
Line one\nLine two\t(tabbed)
두 줄이 되며, (tabbed) 앞에는 실제 탭 문자가 들어갑니다.
Line one
Line two (tabbed)
유니코드 이스케이프도 풀립니다. "Café 東京"은 Café 東京이 됩니다. 한글도 같아서, 이 도구에 "한글"을 넣으면 한글이 나옵니다. 로그에서 \uXXXX로 깨져 보이던 한글 메시지를 읽을 때 유용합니다.
이중 인코딩된 문자열
데이터가 두 번 stringify되면 백슬래시가 겹겹이 쌓입니다.
"\"{\\\"event\\\":\\\"signup\\\",\\\"user\\\":7}\""
중첩 문자열까지 해제를 켜면 두 겹을 모두 풀고, 상태 줄에 2겹을 해제했다고 알려 줍니다. 그대로 두기를 고른 상태라면 결과는 다음과 같습니다.
{"event":"signup","user":7}
중첩 문자열까지 해제를 끄면 한 겹만 풀고 멈추므로, 아직 이스케이프된 안쪽 문자열이 보입니다.
"{\"event\":\"signup\",\"user\":7}"
각 겹에 정확히 무엇이 들어 있었는지 확인하고 싶을 때 쓸모 있습니다.
오류 메시지
입력이 올바른 JSON 문자열이 아니면 문제가 있는 줄과 열을 알려 줍니다. 실제 예시입니다.
| 입력 | 메시지 |
|---|---|
"bad \q escape" |
1행 6열: 잘못된 이스케이프 시퀀스 \q |
He said "hi" |
1행 9열: \"로 이스케이프되지 않은 큰따옴표가 있습니다 |
"unterminated |
1행 1열: 닫히지 않은 문자열: 닫는 큰따옴표가 없습니다 |
JSON에서 허용되는 이스케이프는 \", \\, \/, \b, \f, \n, \r, \t, 그리고 \u 뒤에 16진수 네 자리가 오는 형식뿐입니다. \x41이나 \'처럼 다른 언어의 이스케이프는 JSON에서 쓸 수 없습니다. 입력에서 보기를 누르면 문제가 있는 위치로 이동합니다.
작동 원리
이 도구는 입력을 JSON 문자열 리터럴로 읽으며, 바깥 따옴표가 없으면 붙여서 읽습니다. 이스케이프는 JSON 규칙에 따라 풉니다. 결과가 큰따옴표로 시작하고 그 자체로 올바른 JSON 문자열이며 중첩 문자열까지 해제가 켜져 있으면 한 번 더 풉니다. 마지막으로 결과가 JSON 객체나 배열이면 고른 들여쓰기로 정리합니다. 안에 든 숫자는 쓰인 그대로 유지됩니다. 모든 과정은 브라우저에서 이루어집니다.
팁
- 결과가 올바른 JSON이 아니면 일반 텍스트로 보여 줍니다. 원래 JSON이 아니었던 문자열이라면 그게 맞는 결과입니다.
- 로그에서 값을 복사할 때는 따옴표까지 함께 복사하세요. 양 끝 문자를 빠뜨리는 실수를 줄일 수 있습니다.
- 결과에
\r문자가 섞여 나온다면 원본 텍스트가 Windows 줄바꿈을 쓰고 있었던 것입니다.
다른 방법
JavaScript. JSON.parse(str)가 한 겹을 풉니다. 이중 인코딩된 값이면 결과에 한 번 더 호출한 뒤 JSON.stringify(value, null, 2)로 정리하세요.
Python. json.loads(s)가 JSON 문자열을 풉니다. 이중 인코딩된 문자열이면 두 번 호출하세요.
jq. jq -r . file.json은 JSON 문자열을 원시 텍스트로 출력하고, jq 'fromjson'은 JSON이 담긴 문자열을 파싱합니다.
관련 도구
반대로 텍스트를 JSON 문자열로 이스케이프하려면 JSON 문자열 변환을 쓰세요. 결과를 검사하거나 다시 정리하려면 JSON 포매터를, YAML로 바꾸려면 JSON YAML 변환기를 쓰세요.