온라인 JSON 유효성 검사 방법: 개발자를 위한 실용 가이드
JSON을 쉽게 검증, 포맷, 디버그하는 방법을 배워보세요. 흔한 에러, XML과의 차이점, 모범 사례와 무료 온라인 도구 포함.
JSON이란 무엇이며 왜 검증해야 하는가
JSON(JavaScript Object Notation)은 현대 웹 개발에서 가장 널리 사용되는 데이터 교환 형식입니다. 거의 모든 REST API가 JSON 형식으로 데이터를 반환하고, package.json이나 tsconfig.json 같은 도구 설정 파일이 이 형식을 사용하며, MongoDB 같은 데이터베이스도 JSON 형식으로 문서를 저장합니다.
문제는 단 하나의 잘못된 문자(여분의 쉼표, 빠진 따옴표, 닫히지 않은 괄호)가 전체 JSON을 무효로 만들고 애플리케이션에 오류를 일으킨다는 것입니다. API 응답의 잘못된 JSON은 프론트엔드를 망가뜨릴 수 있습니다. tsconfig.json의 구문 오류는 TypeScript 컴파일을 막습니다.
사용하기 전에 JSON을 검증하면 수 시간의 디버깅을 절약할 수 있습니다. NexTools JSON 검증기를 사용하면 어떤 JSON이든 붙여넣어 정확한 줄 번호의 오류를 확인하고 자동으로 포맷된 출력을 받을 수 있습니다.
JSON 기본 구문: 알아야 할 규칙
JSON에는 엄격한 구문 규칙이 있습니다. 어느 하나라도 위반하면 유효하지 않은 JSON이 됩니다:
- 키는 큰따옴표로 감싸야 합니다:
{"name": "Ana"}는 유효합니다.{name: "Ana"}는 유효하지 않습니다. - 문자열은 큰따옴표를 사용하며, 작은따옴표는 안 됩니다:
"value"는 유효합니다.'value'는 유효하지 않습니다. - 끝에 쉼표를 넣으면 안 됩니다:
{"a": 1, "b": 2}는 유효합니다.{"a": 1, "b": 2,}는 유효하지 않습니다. - 주석을 넣을 수 없습니다: JSON 내에서 //이나 /* */를 사용할 수 없습니다.
- 숫자에는 따옴표를 붙이지 않습니다:
{"age": 25}는 유효합니다.{"age": "25"}는 작동하지만 값이 숫자가 아닌 문자열입니다.
JSON에서 허용되는 데이터 유형:
| 유형 | 예시 | 참고 |
|---|---|---|
| String | "안녕하세요" | 항상 큰따옴표 |
| Number | 42, 3.14, -7 | 정수 또는 소수, 따옴표 없이 |
| Boolean | true, false | 소문자, 따옴표 없이 |
| Null | null | 소문자, 따옴표 없이 |
| Array | [1, 2, 3] | 쉼표로 구분된 값 |
| Object | {"key": "value"} | 키-값 쌍 |
JSON에서 가장 흔한 10가지 오류
JSON 작업 시 가장 자주 만나는 오류들입니다:
- 마지막 요소 뒤의 쉼표:
{"items": [1, 2, 3,]}— 3 뒤의 쉼표가 무효. - 큰따옴표 대신 작은따옴표:
{'name': '홍길동'}—{"name": "홍길동"}이어야 함. - 따옴표 없는 키:
{age: 30}—{"age": 30}이어야 함. - 이스케이프되지 않은 제어 문자:
문자열 내의 탭과 줄바꿈은\t와\n으로 작성해야 함. - 문자열 내 이스케이프되지 않은 따옴표:
내부 따옴표는 이스케이프 필요. - 주석:
JSON은 어떤 종류의 주석도 지원하지 않음. - NaN, Infinity 또는 undefined:
이 JavaScript 값들은 JSON에서 유효하지 않음. 대신null사용. - 16진수 값:
{"color": 0xFF0000}은 유효하지 않음.{"color": "#FF0000"}사용. - 타입이 지정된 배열에서 혼합 타입:
[1, "둘", true]은 유효한 JSON이지만 많은 API는 동종 배열을 기대함. - BOM(바이트 순서 표시):
일부 편집기가 파일 시작 부분에 보이지 않는 바이트를 추가하여 JSON을 무효로 만듦. 항상 BOM 없는 UTF-8로 저장.
이 모든 오류는 JSON 검증기에서 자동으로 감지되며, 각 오류의 정확한 줄과 위치를 보여줍니다.
JSON 포맷팅과 압축 방법
JSON은 두 가지 방식으로 표시할 수 있습니다: 사람이 읽기 위한 정돈된 형태(pretty-print)와 효율적 전송을 위한 압축된 형태입니다.
정돈된 JSON:
{
"user": {
"name": "민수",
"age": 28,
"active": true
}
}
압축된 JSON(같은 데이터, 적은 바이트):
{"user":{"name":"민수","age":28,"active":true}}
압축된 버전은 공간을 적게 차지하며(API와 저장에 이상적), 정돈된 버전은 읽기와 디버깅이 훨씬 쉽습니다.
JavaScript에서:
JSON.stringify(data, null, 2) // 2칸 들여쓰기로 정돈
JSON.stringify(data) // 압축
큰 JSON 파일을 압축하려면 JSON, CSS, JavaScript를 처리하는 코드 압축기를 사용하세요.
JSON vs XML: 각각 언제 사용하는가
JSON 이전에는 XML이 데이터 교환의 지배적 형식이었습니다. 둘 다 여전히 사용되지만 용도가 다릅니다:
| 특성 | JSON | XML |
|---|---|---|
| 가독성 | 더 간결 | 더 장황 |
| 크기 | 30-50% 작음 | 더 큼 |
| 데이터 유형 | String, Number, Boolean, Null, Array, Object | 모든 것이 텍스트 |
| 주석 | 지원 안 함 | 지원 |
| 스키마 | JSON Schema | XSD, DTD |
| 주 용도 | REST API, 설정 | SOAP, 문서, RSS |
| 파싱 | 네이티브 JSON.parse() | XML 파서 필요 |
2026년 현재, JSON은 웹 개발, API, 모바일 애플리케이션에서 주류입니다. XML은 레거시 기업 시스템, RSS/Atom 피드, DOCX 같은 문서 형식에서 유지됩니다.
매일 JSON을 다루기 위한 도구
검증 외에도 이러한 보완 도구들이 작업을 수월하게 합니다:
- JSON 검증기: 구문 확인, 줄 번호가 있는 오류 표시, 자동 포맷팅.
- 코드 압축기: 공백과 줄바꿈을 제거하여 JSON 압축.
- Base64 인코더: URL이나 HTTP 헤더에서 전송하기 위해 JSON을 Base64로 인코딩.
- 텍스트 비교기: 두 JSON 버전을 비교하여 차이점 찾기.
브라우저에서:
JSON.parse(jsonString)— JSON 문자열을 JavaScript 객체로 변환. JSON이 유효하지 않으면 에러 발생.JSON.stringify(obj, null, 2)— 객체를 포맷된 JSON으로 변환.
JSON Schema: 구문이 아닌 구조를 검증하기
구문 검증은 JSON이 올바르게 구성되었는지만 확인합니다. 하지만 실제 애플리케이션에서는 데이터가 올바른 구조를 가지고 있는지도 검증해야 합니다.
이를 위한 것이 JSON Schema입니다 — JSON 문서의 구조를 기술하는 표준:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["name", "age", "email"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0, "maximum": 150 },
"email": { "type": "string", "format": "email" }
}
}
이 스키마로 모든 사용자 JSON에 name(비어 있지 않은 문자열), age(0에서 150 사이의 정수), email(유효한 형식)이 있는지 자동으로 검증할 수 있습니다. Ajv(JavaScript), jsonschema(Python), Newtonsoft(.NET) 등의 라이브러리가 JSON Schema 검증을 구현합니다.
프로덕션에서 JSON 작업 모범 사례
실제 프로젝트에서 흔한 문제를 피하는 데 도움이 되는 사례:
- 외부 소스의 JSON은 항상 검증: API, 사용자 업로드 파일, webhook에서 받은 모든 JSON은 처리하기 전에 try-catch 내의
JSON.parse()를 통과해야 합니다. - 키에 camelCase 사용: JavaScript/TypeScript의 표준 규칙입니다.
user_name대신userName. - 3-4단계 이상의 중첩 피하기: 깊이 중첩된 JSON은 읽기, 순회, 유지보수가 어렵습니다.
- 암호화되지 않은 JSON에 민감한 데이터를 저장하지 않기: 토큰, 비밀번호, 개인 키는 로그나 API 응답의 평문 JSON에 절대 나타나서는 안 됩니다.
- 선택적 필드를 생략하는 대신 null 사용:
{"middleName": null}이 필드를 생략하는 것보다 좋습니다. - 파싱 오류를 우아하게 처리: 최종 사용자에게 JSON.parse의 원시 오류를 보여주지 마세요. 내부적으로 로깅하고 친절한 메시지를 표시하세요.
이 도구를 사용해 보세요:
도구 열기→자주 묻는 질문
파싱 시 JSON이 'Unexpected token'을 표시하는 이유
'Unexpected token' 오류는 JSON.parse가 예상치 못한 문자를 발견했다는 의미입니다. 가장 흔한 원인: 큰따옴표 대신 작은따옴표, 마지막 요소 뒤의 쉼표, JSON 내 주석, 파일 시작 부분의 보이지 않는 BOM 문자. 온라인 검증기에 JSON을 붙여넣어 오류의 정확한 위치를 확인하세요.
JSON 파일 안에 주석을 사용할 수 있는가
안 됩니다. JSON 사양은 어떤 종류의 주석도 허용하지 않습니다(// 도 /* */ 도 안 됩니다). 주석이 있는 JSON이 필요하면 JSONC(VS Code가 settings.json에서 사용), JSON5 또는 YAML 같은 대안 형식을 사용할 수 있습니다.
JSON과 JavaScript 객체의 차이점
JavaScript 객체는 따옴표 없는 키, 함수를 값으로, undefined, Symbol, 끝 쉼표를 가질 수 있습니다. JSON은 더 제한적입니다: 모든 키에 큰따옴표 필요, string, number, boolean, null, array, object만 값으로 허용, 끝 쉼표와 주석 불가.
브라우저에서 처리하기에 너무 큰 JSON 용량
대부분의 최신 브라우저는 50-100MB까지의 JSON을 문제없이 파싱할 수 있습니다. 그 이상이면 파싱이 메인 스레드를 차단하여 인터페이스를 멈추게 할 수 있습니다. 매우 큰 JSON의 경우 JSONStream 같은 스트리밍 파서를 사용하거나 서버 측에서 데이터를 처리하세요.
JSON을 CSV로 변환하거나 반대로 하는 방법
JSON에서 CSV로: JSON이 같은 키를 가진 객체 배열이면 키가 열이 되고 각 객체가 행이 됩니다. CSV에서 JSON으로: 각 행이 헤더를 키로 한 객체가 됩니다. JavaScript로 프로그래밍하거나 온라인 도구를 사용할 수 있습니다.
설정 파일에는 JSON이 좋은가 YAML이 좋은가
사용 사례에 따라 다릅니다. JSON은 더 엄격하고(모호한 오류 적음), 파싱이 빠르며, API의 표준입니다. YAML은 사람이 읽기 더 쉽고, 주석을 지원하며, DevOps에서 인기입니다(Docker Compose, GitHub Actions, Kubernetes). 사람이 편집하는 설정에는 YAML이 좋은 경우가 많습니다. 머신 간 데이터에는 JSON이 표준적 선택입니다.