GroundHaus

JSON Formatter

JSON을 정렬·검증하고 예쁘게 포맷팅합니다.

대기 중
결과가 여기 표시됩니다.

사용법 · 예제 · 제한 사항

이게 뭔가요?

한 줄로 뭉쳐 있거나 들여쓰기가 엉망인 JSON을 읽기 좋은 형태로 다시 정렬하고, 동시에 문법이 올바른지 검증하는 도구입니다. 입력하는 즉시 결과가 바뀌고, 오른쪽 위 상태 배지가 유효한 JSON / 오류를 알려 줍니다. 들여쓰기는 2칸·4칸·압축(한 줄) 중에 고를 수 있습니다.

사용법 — 예시로 바로 확인

예시 버튼을 누르면 아래 한 줄 JSON이 입력됩니다.

{"name":"GroundHaus","tools":["json","base64","uuid"],"nested":{"ok":true,"count":12},"empty":null}

2칸 탭을 선택한 결과입니다. 배열 요소도 한 줄에 하나씩 펼쳐집니다.

{
  "name": "GroundHaus",
  "tools": [
    "json",
    "base64",
    "uuid"
  ],
  "nested": {
    "ok": true,
    "count": 12
  },
  "empty": null
}

압축을 선택하면 처음의 한 줄 형태로 돌아갑니다. 로그에 넣거나 요청 본문으로 보낼 때 씁니다.

  1. 입력 칸에 JSON을 붙여넣습니다. 앞뒤 공백·줄바꿈은 자동으로 무시합니다.
  2. 상태 배지가 유효한 JSON이면 출력 칸에 정렬된 결과가 보입니다.
  3. 들여쓰기 탭을 바꾸면 결과가 즉시 다시 그려집니다.
  4. 복사 버튼으로 결과를 클립보드에 넣습니다. 출력이 길면 전체 화면 버튼으로 넓게 볼 수 있습니다.

최상위가 객체나 배열이 아니어도 됩니다. "abc", 42, true처럼 값 하나만 넣어도 유효한 JSON으로 통과합니다.

오류 위치 읽는 법

아래처럼 마지막 요소 뒤에 쉼표가 남은 JSON을 넣어 보세요.

{
  "a": 1,
  "b": 2,
}

크롬·엣지에서는 다음과 같이 표시됩니다.

구문 오류 (4번째 줄, 1번째 칸): Expected double-quoted property name

4번째 줄 1번째 칸은 닫는 중괄호 } 자리입니다. 파서는 쉼표 다음에 또 다른 "키"가 올 것으로 기대했는데 }를 만났다는 뜻이라서, 실제 고칠 곳은 그 직전 줄의 쉼표입니다. 오류 위치는 “문제가 발견된 지점”이고, 원인은 보통 바로 앞에 있습니다.

브라우저별 차이는 다음과 같습니다.

브라우저 표시 방식
크롬·엣지·웨일 등 (V8 엔진) 메시지의 position 값을 줄·칸으로 바꿔 (N번째 줄, M번째 칸) 표시
파이어폭스 position이 없어 변환 불가. 브라우저 메시지를 그대로 표시하며, 그 안에 line 4 column 1 형태로 위치가 들어 있음
사파리 위치 정보가 없어 메시지만 표시 (예: JSON Parse error: Property name must be a string literal)

줄 번호는 앞뒤 공백을 제거한 입력 기준입니다. 맨 앞에 빈 줄을 여러 개 두고 붙여넣었다면 그만큼 줄 번호가 작게 나옵니다.

자주 틀리는 문법

입력 결과 이유
{"a":1,} 오류 마지막 요소 뒤 쉼표(trailing comma)는 JSON 표준에 없음
{'a':1} 오류 키와 문자열은 큰따옴표만 허용
{"a":1} // 메모 오류 주석 문법 없음. /* */도 마찬가지
{"a":NaN} 오류 NaN·Infinity·undefined는 JSON 값이 아님
{"a":01} 오류 숫자 앞 0 불가
{"a":.5} 오류 소수는 0.5처럼 정수부 필요
{"a":"줄\n바꿈"} 유효 문자열 안 줄바꿈은 \n으로 이스케이프
[1, 2, 3,] 오류 배열도 마지막 쉼표 불가

JavaScript 코드에서 복사한 객체 리터럴은 위 규칙을 자주 어깁니다. tsconfig.json처럼 도구가 주석을 허용해 주는 파일도 표준 JSON은 아니어서 이 도구에서는 오류로 잡힙니다.

알아 두어야 할 변환 동작

이 도구는 입력 문자열을 다시 쓰는 것이 아니라 파싱한 뒤 다시 직렬화합니다. 그래서 문법은 같아도 표기가 달라지는 경우가 있습니다.

입력 출력 설명
{"id": 12345678901234567890} {"id": 12345678901234567000} 2^53 - 1(9007199254740991)을 넘는 정수는 정밀도 손실
{"id": 9007199254740993} {"id": 9007199254740992} 안전 정수 범위 바로 바깥에서도 손실 발생
{"a": 1, "a": 2} {"a": 2} 중복 키는 마지막 값만 남고 경고 없음
{"10": "x", "2": "y"} {"2": "y", "10": "x"} 정수 모양 키는 숫자 오름차순으로 앞에 정렬됨
{"b": 1, "a": 2} {"b": 1, "a": 2} 일반 키는 입력 순서 유지
{"n": 1.0} {"n": 1} 1.0, 1e3, -0은 각각 1, 1000, 0으로
{"s": "\u00e9"} {"s": "é"} 유니코드 이스케이프는 실제 문자로 풀림
{"p": "a\/b"} {"p": "a/b"} 불필요한 이스케이프 제거

큰 숫자가 중요한 데이터(주문번호, 스노우플레이크 ID, 금액의 최소 단위 등)는 이 도구로 정렬한 결과를 원본 대신 저장하면 값이 바뀝니다. 검증·읽기 용도로만 쓰고, 보존이 필요하면 원본에서 해당 값을 문자열("12345678901234567890")로 보내도록 바꾸는 것이 근본 해결입니다.

한계

제작·관리 GroundHaus · 오류 제보 · 데이터 처리 안내

자주 묻는 질문

입력한 JSON이 서버로 전송되나요?

이 도구는 브라우저에 내장된 JSON.parse와 JSON.stringify만 사용하며 입력을 어디로도 보내는 코드가 없습니다. 다만 브라우저 확장 프로그램이나 공용 PC의 클립보드 같은 도구 바깥 요인은 통제하지 못하므로, 비밀 키나 토큰이 든 JSON은 그 점을 감안해 다루세요.

JSON 오류 위치는 어떻게 찾나요?

크롬·엣지처럼 오류 메시지에 position 값을 포함하는 브라우저에서는 "구문 오류 (4번째 줄, 1번째 칸)"처럼 줄과 칸을 계산해 표시합니다. 파이어폭스·사파리는 position을 주지 않아 브라우저 메시지를 그대로 보여 주며, 파이어폭스 메시지에는 자체 line·column이 들어 있습니다. 흔한 원인은 마지막 요소 뒤 쉼표, 작은따옴표, 주석, NaN·Infinity입니다.

큰 숫자가 바뀌어 나오는데 버그인가요?

자바스크립트 JSON.parse의 한계입니다. 9007199254740991(2의 53제곱 - 1)보다 큰 정수는 정밀도가 깎여 12345678901234567890이 12345678901234567000으로 바뀝니다. 주문번호·ID처럼 자릿수가 긴 숫자는 원본에서 문자열로 보내야 보존됩니다.

들여쓰기 칸 수를 바꿀 수 있나요?

네. 2칸·4칸 들여쓰기와 한 줄로 압축(minify)하는 옵션을 지원하고, 결과는 한 번에 복사할 수 있습니다. 압축도 파싱 후 다시 출력하므로 큰 정수나 중복 키는 아래 변환 동작을 확인하세요.