JSON vs JSON5 vs JSONC
핵심 요약: 엄격한 상위 집합 순서: JSONC는 주석을 더하고, JSON5는 작은따옴표, 따옴표 없는 키, 후행 쉼표, 16진수를 더합니다. 잘못 고르면 에디터가 아니라 API가 깨집니다.

핵심부터 말하면, 데이터가 시스템 경계를 넘을 때는 표준 JSON을 쓰고, 사람이 편집하는 로컬 설정에만 JSONC를 쓰세요. 작은따옴표, 후행 쉼표, 따옴표 없는 키가 필요하면 JSON5를 꺼내되 로더의 지원을 먼저 확인하세요.
한 줄로: JSONC는 JSON + 주석, JSON5는 JSON + JavaScript 습관입니다.
기능 매트릭스
| 기능 | JSON | JSONC | JSON5 |
|---|---|---|---|
| 큰따옴표 문자열 | ✅ | ✅ | ✅ |
| 작은따옴표 문자열 | ❌ | ❌ | ✅ |
| 따옴표 없는 키 | ❌ | ❌ | ✅ |
// 줄 주석 |
❌ | ✅ | ✅ |
/* */ 블록 주석 |
❌ | ✅ | ✅ |
| 후행 쉼표 | ❌ | ❌ | ✅ |
16진수 0xFF |
❌ | ❌ | ✅ |
Infinity / NaN |
❌ | ❌ | ✅ |
| 여러 줄 문자열 | ❌ | ❌ | ✅ |
| 표준 파서로 읽힘 | ✅ | ❌ | ❌ |
JSONC는 주석만 해결합니다. 많은 사람이 "주석을 허용하는 JSON"이 후행 쉼표도 허용한다고 가정하지만, tsconfig.json은 그 하나에서 여전히 실패합니다.
각각의 용도
JSON — 교환. API, 큐, 데이터베이스 JSON 열, 로그. 기계 간 모든 것.
JSONC — 에디터 설정. VS Code가 이 파일을 스스로 파싱해 JSON.parse가 보지 않습니다. RFC가 없고 Microsoft가 주도한 사실상 관례입니다.
JSON5 — 사람을 위한 관대한 상위 집합. 목표는 "JavaScript 객체 리터럴처럼 보이는 설정"이었습니다. 빌드 도구가 로드하는 .json5 파일에 가장 잘 맞으며, 문법이 가장 넓고 도구 지원이 가장 좁습니다.
선택
| 상황 | 선택 |
|---|---|
| 요청 또는 응답 본문 | JSON, 대안 없음 |
| MySQL / PostgreSQL의 JSON 열 | JSON, 함수가 다른 것을 받지 않음 |
| 설명이 필요한 프로젝트 설정 | 지원되면 JSONC, 아니면 YAML |
| JS식 느슨함을 원함 | 로더 지원 확인 후 JSON5 |
| 비엔지니어가 편집함 | YAML, 들여쓰기가 중괄호보다 낫다 |
쉽게 빠지는 함정 하나
JSONC 파일을 엄격한 JSON으로 파싱하면 주석을 가리키는 오류가 납니다:
SyntaxError: Unexpected token / in JSON at position 42
주석을 지우기 전에 파일이 JSONC인지 확인하세요. 지우고도 두 줄 뒤의 후행 쉼표에서 여전히 막힐 수 있습니다.
FAQ
JSONC와 JSON5 중 어떻게 고르나?
주석만 필요하면 JSONC를 쓰세요. JSON 위에 //와 /* */를 더하고 VS Code의 settings.json과 tsconfig.json이 사용합니다. 작은따옴표, 따옴표 없는 키, 후행 쉼표, 16진수, 여러 줄 문자열도 원하면 JSON5를 쓰세요. 둘 다 로더에 의존하므로 파일을 읽는 도구의 지원을 확인하세요.
JSONC 파일을 표준 JSON으로 읽을 수 없는 이유는?
JSONC는 별도 RFC가 아니라 사실상 관례이므로 표준 파서가 주석을 거부합니다. 그런 파일에 JSON.parse를 하면 Unexpected token /가 나고 데이터가 아니라 주석을 가리킵니다. 에디터나 전용 파서가 읽는 설정만 JSONC로 쓰세요.
JSON5 파일을 API에 보내도 되나?
아니요. API, 데이터베이스 JSON 열, 큐는 엄격한 JSON을 파싱하므로 JSON5의 작은따옴표, 따옴표 없는 키, 후행 쉼표가 거부됩니다. JSON5는 사람이 편집하는 로컬 설정용이고, 시스템 경계를 넘기 전에 표준 JSON으로 변환하세요.