JSON 포맷터·검사기
JSON을 보기 좋게 정렬하고 문법 오류의 위치를 짚어줍니다. 압축(minify)과 트리 보기도 지원합니다.
입력한 내용은 브라우저 안에서만 처리되며 서버로 전송되지 않습니다.
입력한 내용은 어디로도 가지 않습니다
이 도구는 브라우저 안에서만 JSON을 파싱합니다. 네트워크 요청이 전혀 발생하지 않으므로, API 응답이나 설정 파일처럼 토큰과 개인정보가 섞인 데이터도 안심하고 붙여넣을 수 있습니다.
도구의 기능
정렬은 들여쓰기 2칸으로 읽기 좋게 펼치고, 압축은 공백과 줄바꿈을 모두 지워 한 줄로 만듭니다. 키 정렬은 아래에서 설명하는 비교용 기능입니다. 결과 옆의 통계는 줄 수, 중첩 깊이, 키 개수, 배열 요소 수, 크기를 보여 줍니다. 처음 보는 API 응답이 얼마나 복잡한지 가늠하거나, 깊이가 지나치게 깊어 구조를 다시 잡아야 할지 판단할 때 씁니다.
JSON이 올바르면 "올바른 JSON입니다"가 뜨고, 틀리면 줄과 열 위치와 함께 원인을 한국어로 풀어 알려 줍니다. 브라우저마다 오류 문구가 달라서 크롬, 사파리, 파이어폭스가 내는 서로 다른 메시지를 같은 안내로 바꿔 보여 줍니다.
붙여 넣었는데 JSON이 아니라고 할 때
JSON처럼 생겼지만 JSON이 아닌 것들이 있습니다. 오류 위치가 첫 줄이거나 곳곳에 찍힌다면 이쪽을 의심해 보세요.
파이썬 딕셔너리 출력 — {'name': 'kim', 'active': True, 'note': None}처럼 작은따옴표에 True, None이 보이면 파이썬이 화면에 찍은 것입니다. 파이썬에서 json.dumps()로 다시 뽑아야 합니다.
자바스크립트 콘솔 출력 — {name: "kim", id: 1}처럼 키에 따옴표가 없거나 undefined가 들어 있으면 객체를 콘솔에 찍은 것입니다. JSON.stringify() 결과를 복사해야 합니다.
문자열 안에 든 JSON — "{\"name\":\"kim\"}"처럼 따옴표 앞에 역슬래시가 붙어 있으면 JSON을 한 번 더 문자열로 감싼 것입니다. 로그나 메시지 큐에서 자주 나옵니다. 바깥 따옴표를 벗기고 \"를 "로 바꾸면 됩니다. 역슬래시가 두 겹이면 두 번 감싼 것입니다.
앞뒤에 붙은 다른 글자 — 로그 타임스탬프나 data: 접두어, HTML 태그가 붙어 온 경우입니다. 첫 { 또는 [부터 마지막 } 또는 ]까지만 남깁니다. 파일 맨 앞에 보이지 않는 BOM 문자가 붙어 있어도 첫 글자에서 오류가 나므로, 메모장에서 저장한 파일이라면 이 경우도 의심해 볼 만합니다.
JSON에서 자주 틀리는 문법
JSON은 자바스크립트 객체 리터럴과 비슷하게 생겼지만 훨씬 엄격합니다. 자바스크립트에서 되는 문법이 JSON에서는 오류인 경우가 많습니다.
후행 쉼표는 허용되지 않습니다
{
"a": 1,
"b": 2, ← 이 쉼표가 오류
}
자바스크립트 객체 리터럴에서는 마지막 쉼표가 허용되고, 오히려 diff를 깔끔하게 만들어 권장되기도 합니다. 하지만 JSON 표준(RFC 8259)은 이를 금지합니다.
큰따옴표만 됩니다
{ 'name': 'value' } ← 오류
{ "name": "value" } ← 정상
키와 문자열 값 모두 큰따옴표를 써야 합니다. 따옴표 없는 키도 오류입니다.
주석을 쓸 수 없습니다
//나 /* */ 모두 JSON에서는 문법 오류입니다. 설정 파일에 주석을 남기고 싶다면 "_comment" 같은 키를 쓰거나, JSON5나 YAML 같은 다른 형식을 써야 합니다.
VS Code 설정 파일처럼 주석이 들어가는 파일은 JSON이 아니라 JSONC라는 별도 형식입니다.
그 밖에 허용되지 않는 것들
undefined(null만 가능)NaN,Infinity- 함수, 정규식
- 숫자 앞의
+부호나 선행 0 (01) - 16진수 표기 (
0xFF)
큰 숫자를 넣으면 값이 바뀝니다
자바스크립트의 숫자는 **배정밀도 부동소수점(double)**입니다. 안전하게 표현할 수 있는 정수 범위는 ±(2^53 − 1), 약 9,007조입니다.
이 범위를 넘어서면 정밀도가 사라집니다.
{ "id": 9007199254740993 }
→ 파싱하면 9007199254740992 로 바뀝니다
트위터 스노플레이크 ID, 64비트 정수 기본키, 일부 결제 거래번호가 이 범위를 넘습니다. API에서 이런 값은 문자열로 주고받는 것이 표준적인 해법입니다.
이 도구도 자바스크립트 파서를 쓰므로 같은 제약이 있습니다. 큰 ID가 미묘하게 달라졌다면 이 문제입니다.
줄마다 객체가 하나씩인 파일
로그 파일이나 데이터 내보내기에서 자주 보는 형식으로, 줄마다 {...}가 하나씩 있고 줄 사이에 쉼표가 없습니다. JSON Lines라고 부르며 파일 전체는 올바른 JSON이 아닙니다. 그대로 붙여 넣으면 둘째 줄 첫 글자에서 오류가 납니다. 한 줄만 잘라 넣어 구조를 보거나, 전체를 보려면 각 줄 끝에 쉼표를 붙이고 앞뒤를 [와 ]로 감싸 배열로 만들면 됩니다.
같은 키가 두 번 나오면
JSON 표준은 객체 안의 키가 유일해야 한다고 권장하지만 강제하지는 않습니다. 브라우저 파서는 오류 없이 마지막 값을 채택합니다. {"a": 1, "a": 2}는 {"a": 2}가 됩니다. 이 도구도 같은 동작이라, 정렬한 결과에서 키가 하나 사라졌다면 원본에 중복 키가 있었다는 뜻입니다. 설정 파일을 손으로 고치다 같은 항목을 두 번 적는 실수가 이렇게 조용히 묻힙니다.
한글이 \uD55C 처럼 보일 때
일부 시스템은 한글을 "\uD55C\uAE00"처럼 유니코드 이스케이프로 내보냅니다. 값은 정상이고 표기만 다른 것이라, 이 도구에서 정렬하면 "한글"로 풀려 나옵니다. 반대로 결과를 ASCII만 받는 곳에 보내야 한다면 원래 형태로 두어야 하므로, 정렬 결과가 아니라 원본을 넘기세요.
오류 위치를 읽는 법
문법 오류가 있으면 몇 번째 줄, 몇 번째 열에서 파싱이 멈췄는지 알려줍니다.
주의할 점은 표시된 위치가 실제 원인보다 뒤일 수 있다는 것입니다. 예를 들어 3번 줄 끝에 쉼표를 빠뜨리면 파서는 4번 줄에 들어와서야 이상을 감지합니다. 오류 지점의 바로 앞 줄부터 확인하는 편이 빠릅니다.
키 정렬은 언제 쓰나
'키 정렬' 기능은 객체의 키를 재귀적으로 사전순으로 다시 배열합니다. 두 JSON을 비교할 때 유용합니다.
같은 내용인데 키 순서만 다른 파일은 diff 도구가 전부 다른 것으로 표시합니다. 양쪽을 정렬한 뒤 비교하면 실제로 달라진 부분만 남습니다.
배열은 순서 자체가 의미를 가지므로 정렬하지 않습니다.
압축(minify)은 얼마나 효과가 있나
공백과 줄바꿈을 모두 제거합니다. 들여쓰기가 많은 파일은 30~50%까지 줄어듭니다.
다만 실제 웹 서비스에서는 서버가 gzip이나 brotli로 압축해 전송하므로, minify로 얻는 추가 이득은 생각보다 작습니다. 압축 알고리즘이 반복되는 공백을 매우 효율적으로 처리하기 때문입니다.
minify가 확실히 유용한 경우는 환경변수나 URL에 JSON을 담을 때처럼 길이 제한이 있는 상황입니다.
함께 확인하면 좋은 것
JSON을 Base64로 인코딩해야 한다면 Base64 인코더·디코더를, JWT 페이로드를 확인하려면 JWT 디코더를 이용하세요.
자주 묻는 질문
더 읽을 글
- JSON 파싱 오류 원인별 해결 — 브라우저마다 다른 메시지
크롬(V8)·파이어폭스(SpiderMonkey)·사파리(JavaScriptCore)가 같은 JSON 오류에 내는 실제 메시지를 원인별로 대조하고, 메시지에서 원인으로 역추적하는 법, HTML이 온 경우, 큰 정수가 바뀌는 문제, 오류 문구를 코드에서 다룰 때의 주의점을 정리했습니다.