한국어

JSON 포맷터 — JSON 정렬·압축·오류 위치 찾기

JSON 정렬(2칸·4칸·탭)·압축·키 정렬, 오류 시 줄·열 표시

브라우저에서 처리 · 서버로 전송되지 않음

결과

소개

JSON 포맷터는 한 줄로 이어진 JSON을 읽기 좋게 들여쓰기하거나, 반대로 공백을 모두 없애 크기를 줄여 줍니다. API 응답을 확인하거나 설정 파일을 정리할 때, 어디서 문법이 깨졌는지 찾을 때 쓰세요. 입력하는 즉시 결과가 바뀌므로 버튼을 누를 필요가 없습니다.

사용법

  1. 입력 칸에 JSON을 붙여 넣습니다.
  2. 들여쓰기를 2칸, 4칸, 탭 중에서 고르거나 압축을 선택합니다.
  3. 필요하면 키 정렬을 켭니다. 중첩된 객체와 배열 안의 객체까지 모두 정렬됩니다.
  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이 서버로 전송되나요?

아니요. 모든 처리는 브라우저 안에서 이루어지며 어디에도 전송하거나 저장하지 않습니다.

필요한 도구가 있나요?