JSON 검사기
input.json
여기에 JSON을 붙여넣으세요
또는 이 영역 어디든 .json 파일을 끌어다 놓으세요
정렬된 출력이 여기에 표시됩니다.
오류 패널이 보여 주는 것
브라우저 내장 파서의 메시지는 짧고 브라우저마다 다릅니다. Unexpected token }
만으로는 무엇을 바꿔야 할지 거의 알 수 없습니다. 검사에 실패하면 그 대신 네 가지를 알려 줍니다.
- 줄과 칸 — 파서가 알려 준 문자 위치에서 계산합니다.
- 표식이 붙은 원본 줄 — 정확히 그 문자 아래에 표시되며, 4,000자짜리 압축된 줄에서도 표식이 보이도록 잘라서 보여 줍니다.
- 파서가 기대한 내용 — 엔진의 원문 메시지 대신 쉬운 말로 다시 씁니다.
- 가능한 원인 — 오류 주변의 원본을 아래 목록과 비교해 추정합니다.
문제가 된 줄은 편집기 여백에도 표시되고, 오류 위치로 이동은 커서를 그 문자에 놓아 고치는 동안 상태가 유효로 바뀌는 것을 볼 수 있게 합니다.
흔한 원인과 해결 방법
마지막 쉼표
JavaScript에서는 유효하지만 JSON에서는 허용되지 않습니다. 쉼표 뒤에는 또 다른 멤버가 있어야 하므로, 파서는 속성 이름이나 값을 기대했다고 알려 줍니다.
{ "a": 1, "b": 2, } ✗
{ "a": 1, "b": 2 } ✓
작은따옴표
JSON 문자열은 키와 값 모두 큰따옴표를 사용합니다. 예외는 없습니다.
{ 'name': 'ada' } ✗
{ "name": "ada" } ✓
따옴표 없는 속성 이름
JavaScript 객체 리터럴은 키로 맨 식별자를 허용하지만 JSON은 그렇지 않습니다. 소스 코드에서 복사한 조각이 검사를 통과하지 못하는 가장 흔한 이유입니다.
{ name: "ada" } ✗
{ "name": "ada" } ✓
주석
JSON에는 주석 문법이 없습니다. 의도적인 설계입니다. 설정 파일에 설명이 필요하다면
"_comment" 키를 쓰거나 JSON5, YAML, TOML처럼 주석을 지원하는 형식을 쓰세요. 복구는
//와 /* */ 주석을 제거해 최소한 데이터를 읽을 수 있게 합니다.
파이썬과 JavaScript 리터럴
True, False, None은 파이썬 repr 출력을
붙여넣을 때 들어오고, undefined, NaN, Infinity는
JavaScript에서 옵니다. JSON의 키워드는 모두 소문자로 정확히 세 개입니다. true,
false, null. JSON에는 NaN이나 무한을 표현할 방법이 없으므로
null이나 약속된 문자열을 쓰세요.
문자열 안의 이스케이프되지 않은 문자
문자열 안의 실제 줄바꿈, 탭, 이스케이프되지 않은 큰따옴표는 문자열을 일찍 끝내 버리고, 오류는
보통 실제 실수보다 몇 토큰 뒤에서 드러납니다. \n, \t,
\"로 이스케이프하세요. U+0020 미만의 원시 제어 문자는 어떤 경우에도 허용되지
않습니다.
최상위 값이 여러 개
JSON 문서는 값 하나만 담습니다. 줄바꿈으로 구분된 두 객체는 NDJSON이며, 유용하지만 다른 형식이고 줄 단위로 파싱해야 합니다. 복구는 이를 인식해 각 줄을 배열로 감싸 파일 전체를 한 번에 볼 수 있게 해 줍니다.
유효하지만 위험한 경우
검사를 통과했다고 해서 문서를 그대로 내보내도 안전하다는 뜻은 아닙니다. 유효한 JSON이면서도 실제 문제를 일으키는 두 가지가 있습니다.
- 중복 키. 문법은 허용하지만 동작은 구현에 따라 다릅니다. JavaScript는 마지막 것을 남기므로 데이터가 조용히 사라질 수 있습니다.
- 253−1을 넘는 정수. JavaScript 기반 소비자는 파싱하는 순간 정밀도를 잃습니다. 식별자가 64비트라면 문자열로 직렬화하세요.
문서가 유효해지면 구조가 기대한 대로인지 확인하는 가장 빠른 방법은 트리 뷰어이고, 정렬은 문서를 검토 가능한 형태로 만들어 줍니다.
자주 묻는 질문
어떤 JSON 명세를 사용하나요?
RFC 8259와 ECMA-404를 구현한 브라우저 내장 파서를 사용합니다. 실용적으로 두 문서는 동등하며, RFC 8259는 RFC 7159와 RFC 4627을 대체합니다. 여기서 유효한 문서는 Node, 파이썬, Go, Java에서도 파싱됩니다.
JSON Schema에 맞는지도 확인하나요?
아닙니다. 문법을 검사하고 구조는 검사하지 않습니다. “파싱 가능한 JSON인가?”에 답하고 “내 계약에 맞는가?”에는 답하지 않습니다. 스키마 기반 구조 검증에는 스키마가 필요하며, 브라우저 탭보다 테스트 스위트에서 실행하는 것이 좋습니다.
알려 준 칸 번호가 제 편집기와 다른 이유는 무엇인가요?
칸은 파서가 알려 주는 방식대로 1부터 문자 단위로 셉니다. 탭을 여러 칸 폭으로 표시하는 편집기는 탭으로 시작하는 줄에서 더 큰 값을 보여 줍니다. 오류 패널의 표식은 항상 올바른 문자를 가리킵니다.
빈 문서도 유효한 JSON인가요?
아닙니다. RFC 8259는 정확히 값 하나를 요구하므로 빈 파일은 유효하지 않습니다. null, 0, false, "", [], {}는 그 자체로 유효한 문서입니다.
나머지 도구
같은 엔진, 같은 개인정보 보호 — 모든 페이지가 브라우저 안에서만 동작합니다.