UltKit

JSON 포맷터·유효성 검사

JSON을 붙여 넣으면 보기 좋게 정렬하거나, 압축하거나, 키를 정렬합니다. 파싱에 실패하면 파서가 멈춘 행과 열을 보여 주고 문제 위치 아래에 표시를 달아 주므로, 3,000줄짜리 응답에서 빠진 쉼표 하나도 몇 초 만에 찾을 수 있습니다.

출력 형식

0자 · 0단어 · 0줄

0자 · 0단어 · 0줄

이 브라우저 탭 안에서만 처리됩니다. 입력한 텍스트는 업로드되거나 저장되지 않습니다.

JSON 값 유형

RFC 8259는 정확히 이 값들만 허용합니다. 객체와 배열은 중첩되고, 나머지는 모두 말단 값입니다.

유형예시규칙
객체{"id": 7, "tags": ["a"]}키는 큰따옴표로 감싼 문자열이어야 하며, 멤버는 쉼표로 구분하고 마지막에 쉼표를 붙이지 않습니다.
배열[1, "two", null]어떤 값이든 담는 순서 있는 목록이며, 서로 다른 유형을 섞을 수 있습니다.
문자열"caf\u00e9 \"quoted\""큰따옴표만 쓸 수 있고, 제어 문자는 이스케이프해야 하며, \u 이스케이프는 16진수 네 자리를 씁니다.
숫자-12.5e310진수만 허용됩니다. 마이너스 부호는 선택이고, 앞자리 0은 쓸 수 없으며, 소수부와 지수는 선택입니다. NaN이나 Infinity는 쓸 수 없습니다.
리터럴(true, false, null)true소문자로, 따옴표 없이 씁니다.

파서가 거부하는 입력

아래 각 입력은 이 페이지를 빌드할 때 포맷터와 같은 JSON.parse에 넣어 확인한 결과입니다.

입력문제JSON.parse
{"a": 1,}마지막 쉼표거부
{'a': 1}작은따옴표 문자열거부
{"a": 1 /* note */}주석거부
{a: 1}따옴표 없는 키거부
{"n": NaN}NaN은 JSON 숫자가 아님거부
{"n": 012}앞자리 0거부
{"n": 0x1F}16진수 숫자거부

JSON 문자열의 이스케이프

문자JSON 표기
큰따옴표"\""
백슬래시"\\"
줄바꿈(LF)"\n"
탭"\t"
캐리지 리턴"\r"
제어 문자 U+0001"\u0001"
슬래시(이스케이프 선택)"/"
ASCII 외 문자(이스케이프 불필요)"é"

유효한 JSON 문서가 따르는 규칙

JSON은 RFC 8259(내용상 ECMA-404와 동일)로 규정됩니다. 문서는 객체, 배열, 문자열, 숫자, true, false, null 중 하나의 값입니다. 객체의 키는 항상 큰따옴표로 감싼 문자열입니다. 문자열은 큰따옴표만 쓸 수 있고, 따옴표, 백슬래시, U+0020 미만의 모든 제어 문자를 이스케이프해야 합니다. 그래서 문자열 안의 탭과 줄바꿈은 \t와 \n으로 적습니다. RFC 8259는 시스템 사이에 주고받는 JSON에 UTF-8을 쓰도록 요구합니다.

숫자는 10진수입니다. 앞자리 0, 16진수, NaN이나 Infinity, 앞에 붙는 플러스 부호는 모두 허용되지 않습니다. 주석과 마지막 쉼표도 없습니다. 실제 오류 대부분이 이 두 규칙에서 나오는데, JavaScript 객체 리터럴, JSON5, 많은 설정 파일이 둘 다 허용하기 때문입니다. 아래 참고 표는 흔한 실수 하나하나를 포맷터와 같은 파서에 넣어 얻은 결과입니다.

보기 좋게 정렬, 압축, 키 정렬

보기 좋게 정렬하면 줄바꿈과 들여쓰기가 들어가 구조를 읽기 쉬워집니다. JavaScript 프로젝트에서는 공백 2칸이 가장 흔하고, Python의 json.dumps(indent=4)에서는 공백 4칸이 일반적이며, 탭을 쓰면 읽는 사람이 각자 너비를 정할 수 있습니다. 압축은 의미 없는 공백을 모두 지워 API 페이로드를 줄이고, 문서를 한 줄로 만들어 로그나 환경 변수에 넣기 좋게 합니다.

키 정렬은 모든 객체의 멤버를 재귀적으로 알파벳순으로 배열합니다. JSON 객체는 정의상 순서가 없으므로 정렬해도 의미는 바뀌지 않지만, 서로 다른 시스템에서 나온 두 문서를 훨씬 쉽게 비교할 수 있습니다. 파싱하면 숫자가 JavaScript double로 바뀐다는 점에 주의하세요. 일부 데이터베이스 ID처럼 2^53(9,007,199,254,740,992)보다 큰 정수는 다시 포맷할 때 정밀도를 잃으므로 문자열로 두어야 합니다.

JSON에서 다른 형식으로

포맷한 문서는 읽기 쉽지만, 때로는 다른 형태가 필요합니다. 객체 배열은 JSON CSV 변환으로 스프레드시트가 되고, 데이터 변환기는 파일 전체를 JSON, XML, YAML, CSV 사이에서 변환합니다.

자주 묻는 질문

주석이 있는 JSON을 포맷터가 거부하는 이유는 무엇인가요?
표준 JSON에는 주석 문법이 없습니다. RFC 8259가 일부러 뺀 것입니다. 주석을 지우거나, 파일을 읽는 도구가 지원한다면 JSONC나 JSON5 형식으로 유지하세요.
JSON 오류의 "Unexpected token"은 무슨 뜻인가요?
파서가 그 위치에 올 수 없는 문자를 만났다는 뜻입니다. 작은따옴표, } 앞의 마지막 쉼표, 따옴표 없는 키 등이 원인입니다. 표시되는 행과 열이 바로 그 문자를 가리킵니다.
키를 정렬하면 데이터가 바뀌나요?
아니요. JSON에서 객체 멤버의 순서에는 의미가 없으므로 정렬한 문서도 동등합니다. 배열의 순서는 의미가 있으므로 절대 바꾸지 않습니다.
포맷한 뒤 긴 숫자가 바뀐 이유는 무엇인가요?
JavaScript는 숫자를 64비트 부동소수점으로 저장하며, 2^53까지만 정수를 정확히 표현합니다. 더 큰 ID는 파싱할 때 반올림되므로, 모든 자릿수를 지키려면 문자열로 전송하세요.
붙여 넣는 대신 JSON 파일을 포맷할 수 있나요?
아무 텍스트 편집기로 파일을 열어 전체 선택한 뒤 여기에 붙여 넣으세요. 수십 MB에 이르는 아주 큰 파일은 입력란에 표시하는 동안 탭이 느려질 수 있습니다.