Skip to content
Logo Any Help Me

JSON 포매터 & 검증기: JSON 구문 분석 및 정리

JSON 입력을 기다리는 중...

정렬은 곧 검증이기도 합니다

JSON 포매터는 들여쓰기를 하려면 먼저 파싱해야 하고, 그래서 잘못된 입력에는 더 예쁜 잘못된 결과를 내놓는 대신 실패합니다. 구조상 검증기인 셈입니다. 결과가 나왔다면 문서가 파싱된 것이고, 나오지 않았다면 오류가 어디인지 알려 줍니다.

이 도구는 2칸과 4칸으로 정렬하고, 다시 압축하며, 작업하는 동안 파싱 오류를 표시합니다.

JSON 정렬하는 방법

붙여넣고 들여쓰기를 고르세요. 모든 처리가 입력하는 즉시 로컬에서 이루어집니다.

  1. JSON을 편집 영역에 붙여넣으세요.
  2. 2칸이나 4칸 들여쓰기를 고르세요. 자바스크립트 프로젝트에서는 2칸이 더 흔한 관례이고, 넓은 화면에서 깊게 중첩된 설정을 읽을 때는 4칸이 낫습니다.
  3. 압축(Minify)을 쓰면 선택적인 공백과 줄바꿈이 모두 제거됩니다. 네트워크로 보낼 것이라면 이쪽이 맞습니다.
  4. 유효성 표시를 지켜보세요. 지금 문서가 파싱되는지를 나타냅니다.
  5. 파싱이 실패하면 오류 메시지를 읽으세요. 파서가 포기한 위치를 가리킵니다.
  6. 결과가 맞아 보이면 복사하세요.

실제로 마주치게 될 오류들

잘못된 JSON은 대부분 몇 가지 이유 중 하나로 실패하며, 거의 전부가 습관대로 자바스크립트를 쓴 데서 옵니다. 마지막 요소 뒤의 후행 쉼표는 현대 자바스크립트에서는 합법이고 JSON에서는 불법입니다. 키는 큰따옴표 문자열이어야 하므로 `{name: "x"}`는 실패하고 `{"name": "x"}`는 파싱됩니다. 작은따옴표는 문자열 구분자가 아닙니다. 설정 파일이 아무리 원해도 JSON에 주석은 아예 존재하지 않습니다.

조금 더 미묘한 것도 있습니다. `NaN`, `Infinity`, `undefined`는 JSON 값이 아니므로, 이들을 뱉는 직렬화기는 어떤 파서도 받지 않을 것을 만들어 냅니다. 숫자는 앞자리 0이나 끝의 소수점을 가질 수 없습니다. 그리고 중괄호 짝이 하나 어긋난 경우는 대개 실제 실수 지점과 멀리 떨어진 곳에서 보고되는데, 파서는 입력이 떨어져야 알아채기 때문입니다.

유효한 JSON과 습관적인 자바스크립트

대부분의 파싱 실패를 설명하는 차이들입니다.

이렇게 쓰면유효한 JSON?이유
{"a": 1,}아니요후행 쉼표
{a: 1}아니요따옴표 없는 키
{'a': 1}아니요작은따옴표
{"a": 1} // 메모아니요주석은 JSON의 일부가 아님
{"a": NaN}아니요NaN은 JSON 값이 아님
{"a": .5}아니요숫자에 앞자리 숫자가 필요
{"a": 1}큰따옴표 키, 유효한 숫자

이 표의 "아니요"는 전부 유효한 자바스크립트입니다. JSON 오류가 그토록 흔한 이유가 바로 이 겹침에 있습니다. 문법이 충분히 익숙해서 차이가 스스로를 드러내지 않습니다.

정렬, 압축, 그리고 정밀도

정렬과 압축은 데이터에 관한 한 무손실입니다. 문자열 밖의 공백은 JSON에서 아무 의미가 없으므로 양방향 모두 문서를 그대로 보존합니다. 이 도구는 키 순서를 유지하지만, 명세는 어떤 파서에도 그것을 요구하지 않습니다. 객체 키 순서에 의존하는 코드는 JSON이 약속한 적 없는 것에 기대고 있는 셈입니다.

진짜 주의할 점은 숫자입니다. JSON 숫자는 자바스크립트 배정밀도 실수로 파싱되므로 2^53을 넘는 정수는 왕복에서 정밀도를 잃습니다. 64비트 데이터베이스 식별자에서 흔한 문제이고, API가 그것을 문자열로 보내는 이유이기도 합니다. 모든 처리는 브라우저에서 이루어지고 붙여넣은 내용은 전송되거나 저장되지 않으므로, 키나 개인정보가 담긴 문서에도 안전합니다.

자주 묻는 질문

제 JSON이 왜 파싱되지 않나요?
대개 후행 쉼표, 따옴표 없는 키, 작은따옴표, 주석 중 하나입니다. 넷 다 유효한 자바스크립트이고 넷 다 유효한 JSON이 아닙니다.
2칸과 4칸 중 무엇을 써야 하나요?
자바스크립트 프로젝트에서는 2칸이 더 흔한 관례입니다. 넓은 화면에서 깊게 중첩된 설정을 볼 때는 4칸이 따라가기 쉽습니다. 데이터에는 영향이 없습니다.
압축하면 데이터가 바뀌나요?
아니요. 문자열 밖의 공백은 JSON에서 의미가 없으므로 정렬과 압축 모두 무손실입니다.
JSON에 주석을 넣을 수 있나요?
표준 JSON에는 넣을 수 없습니다. JSONC나 JSON5 확장을 받아들이는 도구도 있지만 표준 파서는 주석을 거부합니다.
큰 ID 숫자가 왜 바뀌었나요?
JSON 숫자는 자바스크립트 배정밀도 실수가 되므로 2^53을 넘는 정수는 정밀도를 잃습니다. API가 64비트 식별자를 문자열로 보내는 이유가 이것입니다.
키 순서가 유지되나요?
이 도구는 유지하지만 명세가 파서에 그것을 요구하지는 않습니다. 객체 키 순서에 의존하는 코드는 보장되지 않은 동작에 기대고 있습니다.
제 JSON이 서버로 전송되나요?
아니요. 파싱과 정렬 모두 전적으로 브라우저에서 이루어지며 붙여넣은 내용은 전송되거나 저장되지 않습니다.

더 많은 도구 보기: 개발자

모두 보기 →