JSON 정렬 및 검사기
위 입력란에 JSON을 붙여넣으면 이 JSON 정렬 및 유효성 검사기(JSON formatter)가 입력하는 즉시 검사합니다. 올바른 JSON은 선택한 들여쓰기로 보기 좋게 정렬되거나 한 줄로 압축됩니다. 잘못된 JSON에는 줄과 열 번호, 문제 부분이 강조된 발췌가 담긴 정확한 오류 메시지가 표시되고, 흔한 실수는 클릭 한 번으로 고칠 수 있습니다. 모든 처리는 브라우저에서 이루어지므로 API 응답, 설정 파일, 내보낸 데이터가 컴퓨터 밖으로 나가지 않습니다.
이 JSON 정렬 및 검사기로 할 수 있는 일
- JSON 정렬(beautify): 공백 2칸, 공백 4칸 또는 탭으로 들여쓰기를 적용합니다. 키 정렬을 체크하지 않으면 원래 키 순서가 그대로 유지됩니다.
- JSON 압축(minify): 모든 공백과 줄바꿈을 제거합니다. 결과 아래의 크기 표시에서 몇 바이트를 줄였는지 바로 확인할 수 있습니다.
- JSON 유효성 검사: 현재 JSON 표준인 RFC 8259에 따라 실시간으로 검사합니다. 문서가 올바르게 되는 순간 상태 표시줄이 초록색으로 바뀝니다.
- 흔한 오류 자동 수정: 후행 쉼표, 작은따옴표, 따옴표 없는 키, 주석, Python 스타일의
True,None,NaN,.5나+1같은 숫자를 고칩니다. - 파일 불러오기: 파일 열기 버튼을 누르거나
.json파일을 입력란에 끌어다 놓으세요. 결과는 다운로드하거나 다시 입력으로 보내 한 번 더 처리할 수 있습니다.
JSON 오류 메시지가 빨간색 표시보다 중요한 이유
대부분의 온라인 검사기는 무언가 잘못되었다는 사실만 알려 줍니다. 브라우저도 크게 다르지 않습니다. Chrome의 JSON.parse는 Unexpected token } in JSON at position 148이라고 보고하고 Firefox는 expected property name or '}'라고 표시하지만, 둘 다 어느 줄을 봐야 하는지는 알려 주지 않습니다. 이 도구는 모든 토큰의 시작 위치를 기억하는 자체 파서를 사용합니다. 파싱이 멈추면 줄과 열 번호, 문제가 된 문자 아래에 캐럿(^)이 표시된 해당 줄의 발췌, 그리고 두 속성 사이에 쉼표가 빠진 것 같습니다 같은 쉬운 설명을 보여 줍니다. 오류로 이동 버튼을 누르면 입력란의 커서가 바로 그 위치로 이동합니다.
붙여넣은 문서에서 가장 자주 보이는 실수는 다음과 같습니다.
| 입력 | 문제 | 올바른 JSON |
|---|---|---|
{'name': 'Ada'} | 작은따옴표 | {"name": "Ada"} |
{name: "Ada"} | 따옴표 없는 키 | {"name": "Ada"} |
[1, 2, 3,] | 후행 쉼표 | [1, 2, 3] |
{"a": 1 "b": 2} | 빠진 쉼표 | {"a": 1, "b": 2} |
{"ok": True} | Python 리터럴 | {"ok": true} |
{"x": 007} | 앞에 붙은 0 | {"x": 7} 또는 {"x": "007"} |
// comment | 주석 | JSON에서는 사용할 수 없음 |
이 실수는 모두 자동으로 고치기 버튼으로 수정됩니다. 수정 기능은 일부러 보수적으로 동작합니다. 빠진 쉼표를 어디에 넣어야 할지는 추측하지 않습니다. 잘못된 위치에 쉼표를 넣으면 데이터의 의미가 바뀌기 때문입니다. 이런 경우에는 대신 정확한 위치를 알려 줍니다.
큰 숫자와 키 순서처럼 흔히 깨지는 부분
많은 포맷터는 JSON.parse를 호출한 뒤 JSON.stringify로 다시 출력하는 방식으로 동작합니다. 이 왕복 과정에서 데이터가 소리 없이 손상됩니다. 1234567890123456789 같은 Twitter나 Snowflake ID는 JavaScript 숫자의 한계인 2^53을 넘기 때문에 1234567890123456800으로 바뀌어 돌아옵니다. 1.0은 1이 되고 1e3은 1000이 됩니다. 이 포맷터는 숫자를 부동소수점으로 변환하지 않습니다. 모든 리터럴을 작성된 그대로 복사하므로, 출력은 입력을 재해석한 것이 아니라 형식만 충실하게 바꾼 결과입니다. 문자열 안의 이스케이프 시퀀스도 마찬가지입니다. "\u00e9"는 "\u00e9" 그대로 남고 "é"로 바뀌지 않습니다.
키 순서도 유지됩니다. JSON 명세에 따르면 객체 멤버에는 순서가 없지만, 설정 파일, 테스트 픽스처, 코드 리뷰는 순서가 일정할 때 훨씬 읽기 쉽습니다. 예를 들어 두 API 응답을 diff 도구로 비교하려고 정규화된 형태가 필요하다면 키 정렬을 켜세요. 두 문서 모두 모든 중첩 단계에서 속성이 알파벳순으로 나열됩니다.
JSON 정렬과 JSON 압축, 언제 무엇을 쓸까
보기 좋게 정렬된 JSON은 사람이 읽기 위한 것입니다. API 응답을 검토할 때, package.json, tsconfig.json, OpenAPI 문서를 작성할 때, 또는 diff에서 한 줄에 변경 하나만 보여야 하는 저장소에 픽스처를 보관할 때 사용하세요. JavaScript 생태계에서는 공백 2칸이 관례이고, Python과 .NET 프로젝트에서는 공백 4칸이 흔하며, 탭을 쓰면 읽는 사람이 각자 원하는 너비를 고를 수 있습니다.
압축된 JSON은 기계를 위한 것입니다. 포맷된 문서에서 공백은 보통 20~40%를 차지하므로, 이를 제거하면 브라우저로 전송하는 페이로드, Redis나 데이터베이스 열에 저장하는 값, HTML에 삽입하는 data-* 속성의 크기가 줄어듭니다. gzip이 그 차이를 어느 정도 메워 주지만, 공백을 제거한 버전은 gzip을 거친 뒤에도 여전히 더 작습니다. 결과 아래의 크기 표시에서 내 문서의 정확한 차이를 확인할 수 있습니다.
터미널과 에디터에서 JSON 다루기
반복해서 처리하는 파일이라면 어떤 웹사이트보다 명령줄 도구가 빠릅니다. jq . file.json은 보기 좋게 정렬하고, jq -c . file.json은 압축하며, python -m json.tool file.json은 Python이 설치된 곳이라면 어디서나 동작합니다. Visual Studio Code는 Shift+Alt+F로 JSON을 포맷하고, $schema 속성을 추가하면 스키마에 맞춰 유효성을 검사합니다. 이 페이지는 그 밖의 경우를 위한 것입니다. 네트워크 탭에서 복사한 응답, 로그 한 줄, 위키에서 가져온 설정 조각을 확인하거나, 아무것도 설치할 수 없는 컴퓨터에서 빠르게 검사해야 할 때 쓰세요.
함께 쓰기 좋은 도구도 있습니다. Base64 인코더 및 디코더는 JWT의 페이로드 부분을 디코딩합니다. 이 부분은 Base64url로 인코딩된 JSON입니다. UNIX 타임스탬프 변환기는 대부분의 API 응답에 들어 있는 createdAt 숫자를 읽을 수 있는 날짜로 바꿔 주고, UUID 디코더는 데이터에 있는 식별자의 버전과 타임스탬프를 알려 줍니다. 더 많은 도구는 개발자 도구에서 확인하세요.
자주 묻는 질문
제 JSON이 서버로 업로드되나요?
아니요. 파싱, 포맷, 수정은 모두 브라우저 안에서 JavaScript로 실행됩니다. 페이지가 로드된 뒤에는 네트워크 연결을 끊어도 도구가 계속 동작합니다. 아무것도 기록하거나 저장하지 않습니다.에디터에서는 허용되는 주석을 검사기가 거부하는 이유는 무엇인가요?
JSON을 만든 Douglas Crockford가 주석을 일부러 뺐습니다. 이 형식이 파서 지시문을 담는 용도로 쓰이는 것을 막기 위해서였습니다.tsconfig.json이나 .vscode/settings.json 같은 파일은 엄밀히 말하면 JSONC로, 에디터가 지원하는 JSON의 상위 집합입니다. API, 데이터베이스, 대부분의 프로그래밍 언어에 있는 엄격한 파서는 주석을 거부합니다. 수정 버튼은 주석을 제거하므로 결과는 어디서나 유효합니다.
JSON Lines나 여러 객체를 한 번에 포맷할 수 있나요?
JSON 문서에는 정확히 하나의 값만 들어갑니다. 쉼표나 줄바꿈으로 구분한 여러 객체를 붙여넣으면 검사기는 첫 번째 추가 값에서 멈춥니다. 대괄호로 감싸 배열로 만든 다음 포맷하세요. 입력이 하나의 문서로 의도된 것인지 알 수 없기 때문에 수정 버튼은 이 작업을 자동으로 하지 않습니다.최대 크기는 얼마인가요?
정해진 제한은 없습니다. 몇 메가바이트 크기의 문서도 노트북에서 1초가 채 걸리지 않고 포맷됩니다. 페이지 반응 속도를 유지하기 위해 약 400 kB를 넘으면 구문 강조가 꺼지지만, 복사와 다운로드는 그대로 동작합니다.키를 정렬하면 데이터가 바뀌나요?
아니요. 위키백과의 JSON 문서에서 볼 수 있듯이 JSON의 객체는 정의상 순서가 없으므로, 파서는 정렬된 문서와 원래 문서를 같은 값으로 읽습니다. 배열은 순서 자체가 데이터의 일부이므로 절대 재정렬하지 않습니다.JSON을 문자열 안에 넣으려면 어떻게 이스케이프하나요?
먼저 압축한 다음, 모든 백슬래시와 큰따옴표를 이스케이프하세요. 많은 언어가 이 기능을 바로 제공합니다. JavaScript의JSON.stringify(JSON.stringify(obj))나 Python의 json.dumps(json.dumps(obj))는 JSON 텍스트를 담은 JSON 문자열을 만들어 줍니다.