✅ JSON Validator
JSON 문법이 맞는지 입력하는 즉시 검사해요. 틀린 줄을 하이라이트하고, 왜 틀렸는지 한국어로 알려줘요.
사용법
- 검사할 JSON을 입력란에 붙여넣습니다. 입력하는 즉시 검사하며, 페이지를 열면 오류가 있는 예시가 들어 있습니다.
- 오류가 있으면 빨간 줄 하이라이트와 함께 몇 번째 줄 몇 열인지, 무엇이 잘못됐는지 한국어로 표시됩니다. 아래 "오류 위치" 패널에서 앞뒤 줄과
^표시로 정확한 자리를 확인하세요. - 💡 힌트에 흔한 원인(마지막 쉼표, 작은따옴표, 주석, 따옴표 없는 키 등)과 고치는 방법이 나옵니다. 자동 수정 시도를 누르면 이런 흔한 오류를 한 번에 고쳐 봅니다.
- 유효하면 키 개수, 최대 깊이, 타입별 개수 같은 구조 통계와 중복 키·큰 정수 같은 경고를 보여줍니다.
들여쓰기 정리나 압축(minify)이 필요하면 JSON 포맷터를 쓰세요. 이 페이지는 "왜 파싱이 안 되는지"를 찾는 데 집중합니다.
JSON 문법, 이것만 지키면 됩니다
JSON(JavaScript Object Notation)은 RFC 8259로 표준화된 데이터 형식입니다. JavaScript 객체와 비슷하게 생겼지만 훨씬 엄격해서, JS 코드에서는 되는 문법이 JSON에서는 오류가 되는 경우가 많습니다.
| 규칙 | ❌ 오류 | ✅ 올바름 |
|---|---|---|
| 키는 큰따옴표 문자열 | {name: 1} | {"name": 1} |
| 문자열은 큰따옴표만 | 'smith' | "smith" |
| 마지막 쉼표 금지 | [1, 2, ] | [1, 2] |
| 주석 없음 | // 설명 | "_comment" 키 사용 |
| 값은 6가지 타입만 | undefined, NaN | null |
| 숫자 앞 0 금지 | 007, .5 | 7, 0.5 |
| 문자열 안 줄바꿈은 이스케이프 | (엔터로 줄바꿈) | "a\nb" |
JSON 값의 타입은 객체 {}, 배열 [], 문자열, 숫자, true/false, null 여섯 가지뿐입니다. 날짜는 "2026-10-05T09:00:00Z" 같은 문자열로, 아주 큰 정수(ID 등)는 문자열로 보내는 것이 안전합니다.
오류 위치(줄·열)는 어떻게 계산하나요?
이 검사기는 브라우저의 JSON.parse 대신 표준 문법을 그대로 따라가는 자체 파서로 한 글자씩 읽습니다. 그래서 브라우저마다 다른 영어 오류 메시지("Unexpected token")가 아니라, 문법이 처음 어긋난 정확한 지점을 줄·열로 알려줄 수 있어요. 줄과 열은 1부터 세고, 열은 그 줄의 몇 번째 글자인지입니다.
주의할 점은 오류가 "발견된" 위치가 실제 실수한 위치보다 뒤일 수 있다는 것입니다. 예를 들어 쉼표를 빠뜨리면 다음 키의 따옴표에서 오류가 나고, 괄호를 안 닫으면 파일 끝에서 오류가 납니다. 이때는 힌트에 나온 "앞 줄 끝"이나 "닫히지 않은 괄호 위치"를 함께 보세요.
예시 검사 3가지
| 입력 | 이 검사기 결과 | 실제로 고칠 곳 |
|---|---|---|
| ① 페이지의 '오류 예시' (작은따옴표 키, 주석, 마지막 쉼표 2개) | 2줄 3열: 키는 큰따옴표 문자열이어야 하는데 작은따옴표가 있음 | 첫 오류만 표시돼요. '자동 수정 시도'를 누르면 따옴표·주석·쉼표가 한 번에 고쳐져 키 3개·깊이 2의 유효한 JSON이 돼요 |
② { "a": 1 ⏎ "b": 2 } (쉼표 빠짐) | 3줄 3열: 쉼표 또는 '}'가 와야 하는데 큰따옴표가 있음 | 오류가 발견된 3줄이 아니라 2줄 끝에 쉼표를 넣어야 해요 |
③ [1, 2, {"x": [3, 4]} (괄호 안 닫힘) | 1줄 21열(입력 끝): 쉼표 또는 ']'가 와야 하는데 입력이 끝남 · 힌트 "1번째 줄 1열의 '['가 닫히지 않았습니다" | 맨 끝에 ] 추가 |
②와 ③처럼 '빠진 것'이 원인이면 오류는 늘 실제 실수보다 뒤에서 발견돼요. 힌트에 나온 '앞 줄 끝'과 '닫히지 않은 괄호 위치'를 먼저 보면 빨라요.
브라우저 오류 메시지 해석표
개발자 도구 콘솔에서 JSON.parse가 던지는 영어 메시지(크롬·Node.js의 V8 엔진 기준)와 원인을 짝지었어요. 메시지 끝의 position은 0부터 센 글자 위치이고, 최신 V8은 줄·열도 함께 알려 줘요.
| 메시지 | 원인 | 예 |
|---|---|---|
| Expected property name or '}' | 키에 따옴표가 없거나 작은따옴표, 또는 객체 마지막 쉼표 | {'name': 1}, {"a":1,} |
| Expected ',' or '}' after property value | 객체 항목 사이 쉼표 빠짐 | 예시 ② |
| Expected ',' or ']' after array element | 배열 쉼표 빠짐 또는 ] 안 닫힘 | 예시 ③ |
| Unexpected token 'T' / ']' … | JSON에 없는 값(True, undefined), 배열 마지막 쉼표 | {"ok": True}, [1,2,] |
| Bad control character in string literal | 문자열 안에 엔터·탭이 그대로 들어감 | "줄⏎바꿈" → "줄\n바꿈" |
| Unexpected end of JSON input | 빈 문자열, 응답이 중간에 잘림, 괄호 안 닫힘 | JSON.parse("") |
| Unexpected non-whitespace character after JSON | JSON 뒤에 다른 글자가 붙음 (두 객체 연결, 응답 뒤 쓰레기 값) | {"a":1}x |
| Unexpected token '<', "<!DOCTYPE "… is not valid JSON | API가 JSON이 아니라 HTML 오류 페이지를 돌려줌 | 404·500 응답, 로그인 리디렉션 |
마지막 줄은 JSON 문법 문제가 아니라 서버 응답 문제예요. 네트워크 탭에서 상태 코드와 Content-Type을 먼저 확인하세요. 메시지 원문 형식은 MDN JSON.parse(), 문법 정의는 RFC 8259에서 볼 수 있어요. 오류 유형을 더 자세히 모은 글은 JSON 문법 오류 패턴 모음이에요.
JSON과 비슷한 형식 비교
| 형식 | 주석 | 마지막 쉼표 | 작은따옴표 | 주로 쓰는 곳 |
|---|---|---|---|---|
| JSON (RFC 8259) | ✗ | ✗ | ✗ | API 응답, package.json |
| JSONC | ✓ // /* */ | 설정에 따라 허용 | ✗ | VS Code 설정, tsconfig.json |
| JSON5 | ✓ | ✓ | ✓ | 사람이 직접 고치는 설정 파일 |
| JavaScript 객체 리터럴 | ✓ | ✓ | ✓ | 코드 안 (JSON 아님) |
tsconfig.json에 주석이 있어도 TypeScript는 잘 읽지만, 같은 파일을 이 검사기나 JSON.parse에 넣으면 오류가 나요. 형식이 JSONC이기 때문이에요. YAML·XML과의 차이는 JSON·YAML·XML 비교에 정리했어요.
경고: 문법은 맞지만 문제가 될 수 있는 것
- 중복 키 —
{"a":1,"a":2}는 표준상 허용되지만 결과가 파서마다 다를 수 있고, 대부분 마지막 값만 남습니다. - 2^53(9,007,199,254,740,992)을 넘는 정수 — JavaScript 숫자는 64비트 실수라 그보다 큰 정수는 끝자리가 바뀝니다. 트위터·디스코드 ID 같은 값은 문자열로 주고받으세요.
자동 수정은 주석 제거, 작은따옴표 변환, 따옴표 없는 키 감싸기, True/False/None·undefined 변환, 마지막 쉼표 제거만 합니다. 결과를 꼭 다시 확인하세요. 입력한 JSON은 브라우저 밖으로 전송되지 않습니다.