본문 바로가기

JSON 유효성 검사

유효·무효만이 아니라 줄, 열, 문자, 그리고 어떻게 고치면 되는지까지 알려 드립니다. 아무것도 저장하지 않으며, 검사는 바로 이 페이지에서 이루어집니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음
정렬 결과

JSON을 붙여 넣으면 입력하는 대로 검사해요.

사용 방법

1

JSON 붙여넣기

또는 파일을 끌어다 놓으세요. 파일은 있는 자리에서 읽으며, 아무것도 어디로 전송되지 않습니다.

2

결과 확인

유효하면 안에 담긴 항목 수와 함께, 무효하면 정확한 위치를 표시해 알려 드립니다.

3

고치고 다시 검사

그 자리에서 수정하면 입력하는 대로 결과가 갱신됩니다.

JSON이 실제로 금지하는 것

JSON의 문법은 의도적으로 아주 작으며, 유효성 검사 실패의 거의 전부는 사람들이 JavaScript에서 가져왔지만 JSON이 채택하지 않은 몇 가지 중 하나입니다. 마지막 요소 뒤의 후행 쉼표. 큰따옴표 대신 작은따옴표. 따옴표 없는 키. 주석. JSON에는 주석이 없으며 한 번도 있었던 적이 없습니다. NaN과 Infinity는 JavaScript에서는 유효한 숫자지만 JSON에서는 유효하지 않습니다. 그리고 맨 앞의 바이트 순서 표시(BOM)는 어떤 편집기에서도 보이지 않는데, 일부 Windows 도구가 UTF-8로 저장할 때 추가하며, 멀쩡한 문서를 첫 글자에서 실패하게 만듭니다.

문법상 허용되지만 여전히 문제를 일으키는 것이 두 가지 있으며, 그래서 “유효함”은 “올바름”과 같지 않습니다. 중복 키는 명세상 금지되어 있지 않지만 파서마다 처리 방식이 달라 대부분 마지막 값을 택하므로, 키가 반복된 문서는 여기서 유효하다고 나오면서도 언어마다 다른 의미가 됩니다. 그리고 JSON에서 숫자에는 정해진 정밀도 한계가 없지만 대부분의 파서는 이를 부동소수점으로 읽습니다. 약 9천조를 넘는 정수는 조용히 반올림되며, 큰 식별자를 문자열로 주고받는 경우가 많은 이유가 이것입니다.

결과로 파싱이 멈춘 정확한 줄, 열, 문자를 알려 드리며, 이는 보통 오류 메시지 자체보다 더 유용합니다. 파서는 실수한 곳이 아니라 문서가 말이 안 되기 시작한 지점을 보고합니다. 닫는 중괄호가 빠지면 파일 끝에서, 쉼표가 빠지면 그 다음 토큰에서 오류가 보고됩니다. 보고된 위치 바로 앞을 살펴보는 습관이 시간을 가장 많이 아껴 줍니다.

형식이 올바른 것과 내용이 올바른 것은 다르며, 이 구분은 중요합니다. 이 도구는 문법이 파싱되는지를 확인합니다. 문서에 API가 요구하는 필드가 있는지, 값이 범위 안에 있는지, 날짜가 정말 날짜인지는 JSON의 문제가 아닙니다. 그것은 스키마 검증이며 스키마가 필요합니다. 여기서 완벽한 문서도 보내려는 서비스에서는 바로 거부될 수 있습니다.

다른 작업이 필요할 때

문법이 아니라 스키마에 맞는지 문서를 검사하려면 JSON Schema가 표준이고 ajv가 가장 빠른 구현체입니다. 필수 필드가 빠졌거나 값이 범위를 벗어났다고 알려 주며, 대개 실제로 궁금한 것이 바로 그것입니다. check-jsonschema는 같은 검사를 명령줄과 CI에서 실행합니다.

명령줄 작업이라면 jq를 갖춰 두세요. jq empty file.json은 유효성을 검사하고 성공하면 아무것도 출력하지 않아 스크립트에 딱 맞으며, jq .는 정렬합니다. 메모리에 담기에 너무 큰 파일은 jq --stream과 Python의 ijson이 점진적으로 파싱하며, 문서 전체를 불러오는 페이지로는 할 수 없는 일입니다.

자주 묻는 질문

제 JSON이 어딘가에 저장되나요?

아니요. 서버 호출도, 로그 기록도 없으며 아무것도 저장하지 않습니다. 페이지를 불러온 뒤 인터넷 연결을 끊어도 계속 작동합니다. 이 점은 생각보다 중요합니다. 사람들이 온라인 포맷터에 붙여 넣는 것은 API 응답, 설정 파일, 오류 페이로드이며, 여기에는 토큰, 고객 기록, 내부 호스트 이름이 흔히 들어 있습니다.

JSON이 깨져 있으면 무엇을 알려 주나요?

줄, 열, 정확한 문자 아래에 캐럿(^)을 표시한 해당 줄, 그리고 그 자리에 무엇이 와야 했는지를 알려 줍니다. JSON이 깨지는 이유는 대부분 네 가지 중 하나입니다. 후행 쉼표, 큰따옴표 대신 작은따옴표, 따옴표 없는 키, 문자열 안의 실제 줄바꿈. 각각을 일반적인 구문 오류로 뭉뚱그리지 않고 구체적으로 짚어 줍니다.

무엇이 유효한 것으로 인정되나요?

RFC 8259를 엄격하게 따릅니다. 즉 키는 큰따옴표로 감싸야 하고, 후행 쉼표와 주석은 없어야 하며, 숫자에 앞자리 0이나 16진수가 없어야 합니다. 엄격함이 유효성 검사기의 존재 이유입니다. 파서가 거부할 것을 받아들인다면 아무것도 알려 주지 못한 셈입니다.

JSON을 스키마에 맞춰 검사하나요?

아니요. 이 도구는 문법을 검사하며, 그것은 다른 질문입니다. 문법은 텍스트가 애초에 JSON인지를 묻고, 스키마는 데이터에 올바른 필드와 타입이 있는지를 묻습니다. 이 페이지는 앞의 질문에 답합니다. 파일이 파싱된다는 것과 찾아낸 구조를 보여 주지만, 필드가 어떠해야 하는지는 알지 못합니다.

유효하다고 나오는데 왜 API는 여전히 거부하나요?

유효한 JSON과 API가 원하는 JSON은 다르기 때문입니다. 문법상 완벽한 문서라도 필수 필드가 빠져 있거나, 숫자가 와야 할 곳에 문자열을 쓰거나, 엔드포인트가 기대하는 것과 다르게 중첩되어 있을 수 있습니다. 이 페이지가 보여 주는 구조 요약을 API 문서와 비교해 보세요. 대개 어긋난 곳이 바로 보입니다.

큰 숫자도 제대로 검사되나요?

네, 한 자리도 빠짐없이 검사합니다. 대부분의 검사기는 큰 숫자를 조용히 망가뜨립니다. JavaScript의 숫자는 64비트 부동소수점이라 정수는 9,007,199,254,740,991까지만 정확히 담을 수 있습니다. 그보다 큰 수(Twitter/X 게시물 ID, Discord 스노플레이크, 은행 계좌 번호, 64비트 데이터베이스 키)는 `JSON.parse`를 거치는 순간 끝자리를 잃습니다. 숫자가 여전히 그럴듯해 보인다는 점이 위험합니다. 7205759403792793600이 조용히 7205759403792793000이 됩니다. 이 페이지는 붙여 넣은 자릿수를 정확히 그대로 유지하고, 보호해야 했던 숫자가 몇 개인지 알려 줍니다.

용량 제한이 있나요?

저희가 정한 한도가 아니라 사용 가능한 메모리가 한계입니다. 몇 MB짜리 문서는 즉시 정렬되며, 매우 큰 문서는 저희 쪽의 어떤 제한이 아니라 한 번에 메모리에 담을 수 있는 양에 따라 제한됩니다.

참고: JSON의 형식이 올바른지를 확인할 뿐, 내용이 의미가 있는지는 확인하지 않습니다. 문서가 완벽하게 유효해도 API가 요구하는 필드가 빠져 있을 수 있습니다. 그것은 스키마 검증이며 스키마가 필요합니다. 여기서는 파싱이 멈춘 정확한 줄, 열, 문자를 알려 드립니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.