JSON 검증은 문자열이 구문적으로 올바른지(JSON 문법을 따르는지) 확인하고, 선택적으로 구조적으로 올바른지(애플리케이션이 기대하는 모양과 일치하는지) 확인하는 것을 의미합니다. 본 가이드는 JavaScript, Python, 명령행, 그리고 브라우저에서 JSON 을 검증하는 방법을 보여주고, 구문 검증과 스키마 검증의 결정적 차이를 설명합니다.
두 가지 JSON 검증
무엇을 검증하기 전에 실제로 던지고 있는 질문이 어느 쪽인지 결정하세요:
- 구문 검증 —— "이것이 유효한 JSON 인가?" JSON 문법에 따라 따옴표, 콤마, 괄호, 값 타입을 검사합니다.
JSON.parse()가 이를 합니다. - 스키마 검증 —— "이 JSON 이 올바른 필드, 타입, 제약을 가졌는가?"
id가 정수인지,email이 존재하는지 등을 확인합니다. JSON Schema 와 Ajv 같은 검증기가 필요합니다.
대부분의 "validate JSON" 검색은 구문 검증을 의미합니다 —— 거기부터 시작합시다.
JavaScript 에서 JSON 검증
가장 단순하고 신뢰할 수 있는 구문 검사는 파싱을 시도하고 오류를 잡는 것입니다. JSON.parse() 는 잘못된 입력에 SyntaxError 를 던집니다:
function isValidJson(text) {
try {
JSON.parse(text);
return true;
} catch {
return false;
}
}
isValidJson('{"name":"Ada"}'); // true
isValidJson("{'name':'Ada'}"); // false —— 작은따옴표
isValidJson('{"a":1,}'); // false —— 후행 콤마문자열이 왜 무효한지 이유가 필요하면 오류 메시지를 보관하세요 —— 보통 위치가 포함됩니다:
function validateJson(text) {
try {
return { valid: true, value: JSON.parse(text) };
} catch (err) {
return { valid: false, error: err.message };
}
}
validateJson('{"a":1,}');
// { valid: false, error: "Expected double-quoted property name in JSON at position 7" }JSON 을 정규식으로 검증하지 마세요. JSON 은 재귀 문법이며 정규식으로 올바르게 검증할 수 없습니다 —— JSON.parse() 가 표준 검증기이며 모든 JavaScript 런타임에 내장되어 있습니다.
Python 에서 JSON 검증
Python 의 json.loads() 는 잘못된 입력에 json.JSONDecodeError 를 던지며 정확한 줄과 열을 제공합니다:
import json
def is_valid_json(text):
try:
json.loads(text)
return True
except json.JSONDecodeError as e:
print(f"Invalid JSON: {e.msg} at line {e.lineno} column {e.colno}")
return False
is_valid_json('{"name": "Ada"}') # True
is_valid_json('{"name": "Ada",}') # False —— 후행 콤마명령행에서 JSON 파일 검증
jq 사용
jq 는 입력이 유효한 JSON 이 아니면 비영(non-zero) 상태로 종료하므로 스크 립트와 CI 에 이상적입니다:
# 유효하면 아무것도 출력하지 않고 0 으로 종료; 무효하면 오류를 출력하고 비영으로 종료
jq empty data.json && echo "valid" || echo "invalid"Python 사용(설치 불필요)
python3 -m json.tool data.json > /dev/null && echo "valid"CI 파이프라인에서
리포의 모든 JSON 파일을 pre-commit 또는 CI 단계로 검증해 잘못된 설정이 프로덕션에 도달하지 않도록 하세요:
# .json 파일 중 하나라도 무효이면 빌드를 실패
find . -name '*.json' -not -path './node_modules/*' \
-exec sh -c 'jq empty "$1" || exit 255' _ {} \;브라우저에서 JSON 검증
코드 없이 빠르게 확인하려면 JSON 을 fixjson 의 JSON 검사기 에 붙여 넣으세요. 입력하는 동안 구문 오류의 정확한 줄과 위치를 즉시 보고하고, 모두 로컬에서 실행됩니다 —— 서버로 전송되지 않으므로 민감한 페이로드에도 안전합니다. JSON 이 깨졌고 단순 표시가 아니라 수리를 원한다면 JSON Fix 가 흔한 오류를 자동 수정합니다.
구문을 넘어: JSON Schema 로 구조 검증
구문상 유효한 JSON 도 애플리케이션에는 틀릴 수 있습니다 —— 필수 필드 누락, 숫자여야 하는 곳에 문자열, 범위를 벗어난 값. 구조를 강제하려면 JSON Schema 로 기대하는 모양을 기술하고 Ajv(JavaScript) 또는 jsonschema 라이브러리(Python)로 검증하세요:
import Ajv from 'ajv';
const ajv = new Ajv();
const validate = ajv.compile({
type: 'object',
required: ['id', 'email'],
properties: {
id: { type: 'integer' },
email: { type: 'string' },
},
});
validate({ id: 42, email: 'a@b.com' }); // true
validate({ id: '42' }); // false —— 타입 오류 & email 누락
// validate.errors 에 자세한 이유명령행 스키마 검증
CI 에서 JSON 을 스키마에 대해 검증할 때 두 CLI 가 대부분의 요구를 충족합니다:
# Python —— 한 번 설치
pip install jsonschema
jsonschema --instance data.json schema.json && echo OK
# Node —— Ajv CLI
npm i -g ajv-cli ajv-formats
ajv validate -c ajv-formats -s schema.json -d "data.*.json"커밋마다 JSON 검증(Pre-Commit 훅)
미검증 JSON 의 커밋을 원천 차단하려면 husky + lint-staged 로 훅 연결:
// package.json
{
"lint-staged": {
"*.json": [
"jq empty",
"ajv validate -s schemas/$name.schema.json -d"
]
}
}
# 훅 설치
npx husky add .husky/pre-commit "npx lint-staged" Python 프로젝트에서는 공식 pre-commit 프레임워크에 내장 check-json 훅이 있어 모든 스테이징 파일에 대해 json.loads 를 실행합니다.
흔한 JSON 검증 오류
검증이 실패할 때 원인은 거의 항상 이 중 하나입니다 —— 각각에 대한 전용 가이드가 있습니다:
- 후행 콤마(마지막 항목 뒤)
- 작은따옴표 대신 큰따옴표, 또는 따옴표 없는 키
- Unexpected-token 오류(HTML 응답,
undefined, 주석) - Unexpected end of input(잘리거나 닫히지 않음)
- 「[object Object] is not valid JSON」 (객체를 먼저 stringify 한 뒤 parse)
자주 묻는 질문
문자열이 유효한 JSON 인지 확인하려면?
try/catch 안에서 JSON.parse()(JavaScript) 또는 try/except 안에서 json.loads()(Python)에 넘기세요. 던지지 않으면 유효합니다. 코드 없는 검사는 브라우저 검사기 를 쓰세요.
JSON 을 정규식으로 검증할 수 있나요?
안 됩니다. JSON 은 재귀 문법이며 정규식으로는 올바르게 표현할 수 없습니다. 항상 진짜 파서를 쓰세요 —— JSON.parse().
JSON 검증과 파싱의 차이는?
파싱은 텍스트를 사용 가능한 값으로 바꾸고, 검증은 단지 파싱이 가능한지 확인합니다. 실용적으로 성공적인 파싱이 곧 검증입니다 —— 같은 동작이며 유효성만 신경 쓸 때 결과를 버리면 됩니다.
스키마에 대해 JSON 을 검증하려면?
JSON Schema 를 Ajv(JavaScript) 또는 jsonschema 라이브러리(Python)와 함께 사용하세요. 스키마 검증은 타입, 필수 필드, 제약을 확인합니다 —— 구문만이 아닙니다.
지금 JSON 검증 —— 설정 불필요
JSON 을 JSON 검사기 에 붙여 넣어 즉시 구문 오류와 정확한 줄·위치를 확인하세요. 모든 처리는 브라우저에서 일어나고 데이터는 기기를 떠나지 않습니다.
- JSON 검사기 —— 브라우저에서 즉시 구문 검사
- JSON Fix —— 무효한 JSON 수리, 단순 표시가 아님
- JSON Schema 란? —— 구조와 타입 검증, 구문만이 아님
- JSON 이란? —— JSON 을 유효/무효로 만드는 문법 규칙