본문으로 바로가기

JSON 포맷터

JSON을 들여쓰기로 정리하거나 한 줄로 압축하고, 문법 오류는 몇 행 몇 열인지 짚어 줍니다. 키 정렬, 유니코드 이스케이프, 주석 허용 옵션과 큰 정수·중복 키 경고가 있습니다.

0자 · 0줄
방식

0자 · 0줄

입력한 내용은 이 브라우저 안에서만 처리되며 서버로 전송되지 않습니다. 어떻게 동작하나요?

한 줄 JSON을 줄바꿈과 들여쓰기로 정리하는 JSON 포맷터

사용 방법

“방식”에서 세 가지 중 하나를 고릅니다.

  • 포맷: 줄을 나누고 들여써서 구조가 보이게 합니다. 들여쓰기는 목록에서 “공백 2칸”, “공백 4칸”, “탭” 중에 고릅니다.
  • 압축: 값 사이의 공백과 줄바꿈을 모두 없애 한 줄로 만듭니다. 이 방식에서는 들여쓰기 목록이 사라집니다.
  • 검증: 결과는 포맷과 똑같이 나오고, 문법이 맞으면 “올바른 JSON입니다.” 표시가 하나 더 붙습니다. 포맷이나 압축 결과가 나왔다면 그 입력은 이미 문법 검사를 통과한 것입니다.

체크박스는 세 방식 모두에 적용됩니다.

  • 키 정렬: 안쪽에 겹쳐 있는 객체까지 모든 객체의 키를 문자 코드 순서로 정렬합니다. 대문자가 소문자보다 앞에 오고, 영문자는 é, 가, 日처럼 ASCII가 아닌 글자보다 앞에 옵니다. {"z":1,"a":{"c":2,"b":3}}은 {"a":{"b":3,"c":2},"z":1}이 됩니다. 배열 안의 순서는 건드리지 않습니다.
  • ASCII 외 문자 이스케이프 (\uXXXX): 악센트가 붙은 글자나 이모지처럼 ASCII가 아닌 문자를 \uXXXX 표기로 바꿉니다. "é😀"는 "\u00e9\ud83d\ude00"이 됩니다. 이모지는 코드 두 개로 나뉘어 적힙니다.
  • 주석·trailing comma 허용 (JSON5/JSONC): 아래 별도 항목에서 설명합니다.

결과 아래에는 숫자 세 개가 나옵니다. “키 개수”는 안쪽 객체의 키까지 모두 센 값이고, “중첩 깊이”는 가장 바깥 괄호를 1로 셉니다. “크기”는 입력이 아니라 결과의 UTF-8 바이트 수입니다. {"order":{"id":1001,"items":[{"sku":"A1","qty":2}],"paid":true}}를 공백 2칸으로 포맷하면 키 개수 6, 중첩 깊이 4, 크기 129B입니다. 같은 입력을 압축으로 바꾸면 크기만 줄어듭니다.

값은 같지만 표기가 달라지는 곳

이 도구는 입력을 브라우저의 JSON 해석기(JSON.parse)로 읽은 뒤 다시 글자로 내보냅니다. 그래서 공백만 바뀌는 것이 아니라, 뜻이 같은 다른 표기로 적혀 있던 부분은 한 가지 표기로 통일됩니다.

입력 결과
1.0 1
0.10 0.1
1e2 100
1E-7 1e-7
-0 0
"\u00e9" "é"
"a\/b" "a/b"

숫자 값이나 문자열 내용은 그대로이지만, 원문과 글자 단위로 비교하는 용도(서명 검증, 해시 비교, 줄 단위 diff)라면 이 차이가 드러납니다. -0만은 부호가 사라지므로 음의 0을 구분하는 프로그램에 넘길 데이터라면 주의하세요.

값이 실제로 바뀔 때 뜨는 경고 세 가지

오류 없이 결과가 나오지만 값이 원문과 달라지는 경우가 있습니다. 이 도구는 그중 세 경우를 결과와 함께 경고로 알려 줍니다. 경고가 떠도 결과는 그대로 나옵니다.

  • 15자리를 넘는 정수: 자바스크립트 숫자는 정수를 2^53 - 1(9007199254740991)까지만 정확히 담습니다. {"id":9007199254740993}을 넣으면 결과는 9007199254740992로, 끝자리가 바뀝니다. 경고는 실제로 값이 바뀌었는지가 아니라 자릿수(16자리 이상인 정수)로 판단하므로, 1234567890123456처럼 값이 그대로인 16자리 정수에도 뜹니다. 소수점이나 지수가 있는 숫자와 문자열 안의 숫자는 세지 않습니다. 큰 ID를 정확히 보존해야 하면 데이터를 만드는 쪽에서 문자열("id":"9007199254740993")로 내보내야 합니다.
  • 표현할 수 있는 범위를 벗어난 숫자: 1e400처럼 너무 큰 숫자는 결과에서 null이 됩니다.
  • 같은 객체 안의 중복 키: {"a":1,"a":2}는 {"a":2}가 됩니다. 앞의 값은 사라지고 마지막 값만 남습니다. 경고에는 중복된 키 이름이 다섯 개까지 표시됩니다.

오류 위치 읽는 법

문법이 틀리면 결과 대신 “올바른 JSON이 아닙니다. 3행 21열 부근을 확인하세요.” 같은 안내와 함께, 그 줄의 앞뒤와 ^ 표시가 나옵니다.

2 |   "name": "a",
3 |   "tags": ["x", "y",]
  |                     ^
4 | }

^가 가리키는 곳은 더 읽을 수 없게 된 첫 글자입니다. 원인은 그 자리이거나 바로 앞에 있습니다. 위 예에서 ^는 ]를 가리키지만 고칠 것은 그 앞의 쉼표입니다. 오류는 처음 만난 하나만 알려 주므로, 고친 뒤에 다음 오류가 나올 수 있습니다.

자주 걸리는 입력은 다음과 같습니다.

  • 마지막 항목 뒤의 쉼표: [1, 2, 3,]
  • 작은따옴표 문자열이나 따옴표 없는 키: {'a': 1}, {a: 1}
  • //, /* */ 주석
  • 앞에 0이 붙은 숫자: 01
  • NaN, undefined처럼 JSON에 없는 값
  • 문자열 안에 그대로 들어간 줄바꿈 (\n으로 적어야 합니다)

이 가운데 쉼표와 주석 두 가지만 아래 옵션으로 넘어갈 수 있고, 나머지는 직접 고쳐야 합니다.

주석·trailing comma 허용 옵션이 하는 일

표준 JSON(RFC 8259, ECMA-404)은 주석과 마지막 항목 뒤의 쉼표(trailing comma)를 허용하지 않습니다. 하지만 편집기 설정 파일처럼 사람이 직접 고치는 파일에는 이를 허용하는 변형인 JSONC(JSON with Comments)나 JSON5가 흔히 쓰입니다. “주석·trailing comma 허용 (JSON5/JSONC)“을 켜면 해석하기 전에 // 주석, /* */ 주석, 닫는 괄호 바로 앞의 쉼표를 지웁니다. 문자열 안에 있는 //나 쉼표는 지우지 않으므로 "http://x//y" 같은 값은 그대로입니다.

알아 둘 점이 세 가지 있습니다.

  • 지원하는 것은 주석과 쉼표뿐입니다. JSON5가 허용하는 작은따옴표나 따옴표 없는 키는 옵션을 켜도 오류입니다.
  • 결과는 표준 JSON이라 주석이 남지 않습니다. 주석을 보존한 채 들여쓰기만 다듬는 용도로는 쓸 수 없습니다.
  • 옵션을 켠 채 오류가 나도 오류 조각은 주석을 지우기 전의 입력을 그대로 보여 줍니다. 행 번호와 열 번호도 원문 기준이라, 같은 줄의 오류 위치보다 앞에 /* */ 주석이 있어도 열 번호가 어긋나지 않습니다.

받은 데이터가 표준 JSON인지 확인하려는 목적이라면 이 옵션을 꺼 두세요. 켜 두면 주석이 섞인 입력도 통과합니다.

참고 자료

자주 묻는 질문

문법만 검사하나요, JSON 스키마(JSON Schema)까지 검증하나요?

문법(RFC 8259, ECMA-404)만 검사합니다. 괄호의 짝, 큰따옴표, 쉼표 위치처럼 JSON 자체의 구조를 봅니다. 특정 스키마가 요구하는 필드가 있는지, 값의 타입이 맞는지는 확인하지 않으므로 검증 방식에서 올바른 JSON이라고 나와도 스키마에는 어긋날 수 있습니다.

키 정렬을 켜지 않았는데도 키 순서가 바뀌었습니다. 왜 그런가요?

키가 0 이상의 정수 모양이면 그렇습니다. 브라우저의 JSON 해석기는 이런 키를 숫자 크기순으로 맨 앞에 모읍니다. {"b":1,"a":2,"10":0,"2":0}을 넣으면 키 정렬을 꺼도 2, 10, b, a 순서로 나옵니다. 키 정렬을 켜도 정수 모양 키는 숫자 크기순으로 맨 앞에 오고, 나머지 키만 문자 코드 순서로 정렬됩니다.

한 줄에 JSON이 하나씩 들어 있는 로그 파일(JSON Lines)도 한 번에 정리되나요?

안 됩니다. 이 도구는 입력 전체를 값 하나로 읽습니다. 값 두 개가 이어져 있으면 두 번째 값이 시작하는 자리에서 오류가 납니다. 예를 들어 첫 줄에 {"a":1}, 둘째 줄에 {"b":2}가 있으면 2행 1열 오류입니다. 한 줄씩 따로 붙여넣거나, 전체를 대괄호로 감싸고 줄 사이에 쉼표를 넣어 배열로 만들면 됩니다.

얼마나 큰 JSON까지 넣을 수 있나요?

입력이 10MB를 넘으면 해석을 시도하지 않고 입력이 너무 크다는 안내만 보여 줍니다. 크기와 별개로 괄호가 아주 깊게 겹친 입력은 브라우저의 한도에 걸려 중첩이 너무 깊다는 오류가 날 수 있고, 그 한도는 브라우저마다 다릅니다.

최종 수정일: