JSON 포맷터 — JSON 정렬·압축·오류 위치 찾기
JSON 정렬(2칸·4칸·탭)·압축·키 정렬, 오류 시 줄·열 표시
브라우저에서 처리 · 서버로 전송되지 않음
소개
JSON 포맷터는 한 줄로 이어진 JSON을 읽기 좋게 들여쓰기하거나, 반대로 공백을 모두 없애 크기를 줄여 줍니다. API 응답을 확인하거나 설정 파일을 정리할 때, 어디서 문법이 깨졌는지 찾을 때 쓰세요. 입력하는 즉시 결과가 바뀌므로 버튼을 누를 필요가 없습니다.
사용법
- 입력 칸에 JSON을 붙여 넣습니다.
- 들여쓰기를 2칸, 4칸, 탭 중에서 고르거나 압축을 선택합니다.
- 필요하면 키 정렬을 켭니다. 중첩된 객체와 배열 안의 객체까지 모두 정렬됩니다.
- 결과 칸의 복사 버튼으로 가져갑니다. 오류가 있으면 줄과 열이 표시되니 그 위치부터 고치세요.
기준
- 문법은 RFC 8259(ECMA-404)의 JSON입니다. 키와 문자열은 큰따옴표만 쓰고, 주석과 마지막 쉼표는 허용하지 않습니다.
- 오류 위치는 1부터 센 줄과 열입니다. 줄바꿈은
\n,\r\n,\r모두 한 번으로 셉니다. 열은 글자(코드 포인트) 단위로 세므로 이모지도 1칸입니다. 오류 줄 아래의^표시는 탭 문자를 그대로 따라 맞춰 그립니다. - 키 정렬은 모든 단계에서 문자 코드 순서(대문자가 소문자보다 앞)로 하며 배열 안의 요소 순서는 바꾸지 않습니다. 자바스크립트 객체의 특성상
"1","2"같은 정수형 키는 정렬 옵션과 관계없이 항상 숫자 순으로 맨 앞에 옵니다. - 출력은 한글·한자·이모지를 이스케이프하지 않고 그대로 두며, JSON이 요구하는 문자만
\n,\"형태로 씁니다."\u0041"같은 유니코드 이스케이프는"A"로 풀어서 씁니다. - 숫자는 JavaScript의 Number로 읽습니다. 2^53을 넘는 정수와 유효숫자가 17자리를 넘는 소수는 정확히 보존되지 않으며, 이때 경고가 나옵니다.
1e999처럼 너무 커서 무한대(Infinity)가 되는 숫자는 JSON에 표현할 수 없어null로 바뀌고 별도 경고가 나옵니다. - 한 객체 안에 같은 키가 두 번 나오면(
{"a":1,"a":2}) JSON 규칙상 마지막 값만 남으므로, 결과는 그대로 만들되 어느 키가 몇 줄 몇 열에서 다시 나왔는지 경고합니다. - 중첩은 512단계까지 지원합니다. 그보다 깊으면 “중첩이 512단계를 넘는 JSON은 지원하지 않아요”라고 알려 줍니다.
예시
| 입력 | 옵션 | 결과 |
|---|---|---|
{"b":1,"a":{"d":2,"c":3}} |
압축 + 키 정렬 | {"a":{"c":3,"d":2},"b":1} |
{"이름":"홍길동"} |
2칸 | 여러 줄, "이름": "홍길동" |
{"a": 1,} |
— | 1줄 9열: 예상하지 못한 문자 } |
{"id": 12345678901234567890} |
압축 | {"id":12345678901234567000} (경고 표시) |
참고
- 설정 파일이나 API 요청 본문을 만들 때는 압축을, 사람이 읽을 때는 2칸 들여쓰기를 쓰면 편합니다.
- 오류가 여러 개여도 처음 만난 오류 하나만 보여 주니, 고친 뒤 다음 오류가 나오는지 확인하세요.
자주 겪는 오류
- 작은따옴표로 감싼 문자열(
{'a': 1})은 JSON이 아니라 자바스크립트 객체 표기입니다. 큰따옴표로 바꾸세요. - 키에 따옴표가 없는
{a: 1}도 같은 이유로 오류가 납니다. 자바스크립트 콘솔에서 복사한 객체가 대표적입니다. - 마지막 요소 뒤의 쉼표(
[1, 2,])와//,/* */주석은 허용되지 않습니다. 설정 파일에 주석이 필요하면 JSONC나 YAML을 쓰는 편이 낫습니다. - 문자열 안에 실제 줄바꿈이나 탭이 들어 있으면 오류입니다. 줄바꿈은
\n으로 적어야 합니다. NaN,Infinity,undefined는 JSON 값이 아닙니다. 서버가 이런 값을 내보냈다면null이나 문자열로 바꾸도록 서버 쪽을 고쳐야 합니다.- 앞뒤에 붙은 BOM(보이지 않는 UTF-8 표식)은 자동으로 무시하므로 파일에서 복사한 내용도 그대로 붙여 넣어도 됩니다.
활용 팁
- API 응답을 디버깅할 때는 먼저 2칸 들여쓰기로 구조를 보고, 필요한 부분만 골라 압축한 뒤 테스트 코드나
curl명령에 붙여 넣으면 편합니다. - 두 JSON을 비교하려면 둘 다 같은 들여쓰기와 키 정렬로 바꾼 다음 diff 도구에 넣으세요. 키 순서만 다른 객체도 같은 모양으로 맞춰져 실제 차이만 보입니다.
- 로그에서 복사한 JSON은 앞뒤에 시간이나 접두어가 붙어 있는 경우가 많습니다. 중괄호나 대괄호가 시작하는 곳부터 끝나는 곳까지만 정확히 복사하세요. 뒤에 남은 글자가 있으면 “JSON 뒤에 남은 내용” 오류가 나옵니다.
- 이스케이프된 JSON 문자열(
"{\"a\":1}")을 받았다면 한 번 더 파싱해야 하는 중첩 문자열입니다. 먼저 바깥 문자열을 정리한 뒤 안쪽 내용을 다시 붙여 넣으세요. - 용량이 큰 JSON은 입력 후 잠시 뒤에 결과가 갱신됩니다. 타이핑하는 동안에는 브라우저가 멈추지 않도록 일정 길이를 넘으면 잠깐 기다렸다가 변환합니다.
- 민감한 토큰이나 개인정보가 들어 있어도 데이터는 브라우저 밖으로 나가지 않으니 안심하고 쓰세요.
더 알아두면 좋은 점
- 압축 결과는 줄바꿈과 공백이 전혀 없는 한 줄이므로 HTTP 요청 본문이나 환경 변수, 쉘 명령의 인자로 넣기에 알맞습니다. 쉘에 넣을 때는 작은따옴표로 감싸 큰따옴표가 풀리지 않게 하세요.
- 같은 데이터를 여러 번 변환해도 결과가 항상 같습니다. 키 정렬을 켜면 입력의 키 순서와 상관없이 같은 출력이 나오므로 변경 이력을 비교하는 용도로 안정적입니다.
- 빈 객체
{}와 빈 배열[]은 들여쓰기 옵션과 관계없이 한 줄로 출력됩니다. - 입력이 비어 있으면 결과도 비어 있고 오류도 표시되지 않습니다. 붙여 넣는 순간부터 검사가 시작됩니다.
- 오류 줄 밑의
^표시는 그 줄에서 문제가 발생한 열을 가리키므로, 줄이 길어도 어느 글자 근처인지 곧바로 알 수 있습니다. - 숫자
1.0은1로 출력되고1e2는100으로 출력됩니다. 값은 같지만 표기가 정리되니 원본 표기를 보존해야 한다면 문자열로 쓰세요.
추가 예시
| 입력 | 결과 또는 안내 |
|---|---|
[1, 2, 3] |
2칸 들여쓰기에서는 숫자마다 한 줄씩 나뉩니다 |
{"a": 1e999} |
{"a": null}과 함께 무한대 경고가 나옵니다 |
{"a": 0.12345678901234567890123} |
17자리를 넘는 소수라서 반올림 경고가 나옵니다 |
{'a': 1} |
1줄 2열: 예상하지 못한 문자 ' |
{"a": "한글", "b": "😀"} |
한글과 이모지가 이스케이프 없이 그대로 나옵니다 |
경고는 오류가 아니라 안내입니다. 결과는 정상적으로 만들어지지만 숫자 값이 원본과 조금 다를 수 있다는 뜻이므로, 정밀한 금액이나 아이디가 들어 있다면 원본 데이터를 문자열로 바꾸는 것을 권장합니다.
자주 묻는 질문
JSON 오류가 났을 때 어디가 문제인지 알 수 있나요?
네. 입력을 처음부터 훑어 처음으로 규칙에 어긋나는 글자의 줄 번호와 열 번호를 알려 주고, 해당 줄 내용과 위치 표시도 함께 보여 줍니다. 브라우저마다 다른 오류 문구에 의존하지 않고 직접 계산해서 어느 브라우저에서나 같은 위치가 나옵니다.
주석이나 마지막 쉼표가 있는 JSON도 처리되나요?
아니요. 이 도구는 RFC 8259의 엄격한 JSON만 받아들입니다. 주석, 마지막 쉼표, 작은따옴표 문자열, 따옴표 없는 키는 오류로 표시되며 어디에 있는지 알려 줍니다.
아주 큰 숫자를 넣으면 값이 바뀌나요?
바뀔 수 있어요. 이 도구는 JavaScript의 JSON 파서를 쓰기 때문에 9007199254740991(2^53-1)을 넘는 정수는 가장 가까운 값으로 반올림됩니다. 그런 숫자가 입력에 있으면 경고를 띄웁니다. 정확한 자릿수가 필요하면 문자열로 감싸세요.
입력한 JSON이 서버로 전송되나요?
아니요. 모든 처리는 브라우저 안에서 이루어지며 어디에도 전송하거나 저장하지 않습니다.