5가지 일반적인 JSON 구문 오류 및 해결 방법
개발자가 가장 자주 접하는 5가지 일반적인 오류에 대한 완벽한 가이드로 JSON 구문을 마스터하세요. 실용적인 예제와 전문가 팁으로 JSON 검증 문제를 식별, 수정 및 방지하는 방법을 배웁니다.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# 5가지 일반적인 JSON 구문 오류 및 해결 방법
JSON(JavaScript Object Notation)은 현대 웹 개발에서 어디에나 있습니다—API 응답에서 구성 파일까지. 간단한 구문에도 불구하고 개발자는 애플리케이션을 중단시키는 좌절스러운 JSON 오류에 지속적으로 직면합니다.
이 가이드는 가장 자주 접하게 될 5가지 가장 일반적인 JSON 구문 오류, 즉시 식별하는 방법 및 영구적으로 수정하는 방법을 다룹니다.
---
JSON 오류가 흔한 이유
JSON의 엄격한 구문 요구 사항은 잘못된 문자 하나만으로도 전체 문서를 무효화할 수 있습니다. JavaScript와 달리 JSON은:
- ✅ 문자열에 큰따옴표 필요 (작은따옴표는 유효하지 않음)
- ✅ 후행 쉼표 금지
- ✅ 키와 값에 대한 정확한 형식 요구
- ✅ 주석 허용 안 함
개발자를 가장 자주 혼란스럽게 하는 오류를 살펴보겠습니다.
---
오류 #1: 후행 쉼표(조용한 킬러)
문제
후행 쉼표—배열이나 객체의 마지막 항목 뒤에 추가 쉼표—는 JavaScript에서는 완전히 유효하지만 JSON에서는 완전히 금지됩니다.
❌ 유효하지 않은 JSON
{
"username": "alice123",
"email": "alice@example.com",
"active": true,
}
{
"products": [
{ "id": 1, "name": "Laptop" },
{ "id": 2, "name": "Mouse" },
{ "id": 3, "name": "Keyboard" },
]
}
✅ 유효한 JSON
{
"username": "alice123",
"email": "alice@example.com",
"active": true
}
{
"products": [
{ "id": 1, "name": "Laptop" },
{ "id": 2, "name": "Mouse" },
{ "id": 3, "name": "Keyboard" }
]
}
나타날 오류 메시지
Unexpected token } in JSON at position 78
SyntaxError: Trailing comma in JSON
해결 방법
수동 수정:} 또는 대괄호 ] 앞의 쉼표를 찾습니다// 코드 편집기에서 다음 패턴을 검색:
,\s} // 닫는 중괄호 앞 쉼표
,\s] // 닫는 대괄호 앞 쉼표
---
오류 #2: 큰따옴표 대신 작은따옴표
문제
JavaScript는 문자열에 작은따옴표와 큰따옴표를 모두 허용하지만 JSON은 큰따옴표만 허용합니다("). 작은따옴표를 사용하는 것은 JavaScript 객체를 JSON으로 변환할 때 가장 흔한 실수 중 하나입니다.
❌ 유효하지 않은 JSON
{
'name': 'John Doe',
'age': 30,
'city': 'New York'
}
{
"name": 'John Doe',
"age": 30
}
✅ 유효한 JSON
{
"name": "John Doe",
"age": 30,
"city": "New York"
}
나타날 오류 메시지
Unexpected token ' in JSON at position 2
SyntaxError: Expected property name or '}' in JSON
해결 방법
빠른 수정:// JavaScript: 작은따옴표를 큰따옴표로 변환
const fixedJson = invalidJson.replace(/'/g, '"');
더 나은 접근 방식: 적절한 JSON 직렬화 사용:
// 따옴표로 수동으로 JSON을 작성하는 대신:
const wrong = "{ 'name': 'John' }"; // ❌
// JSON.stringify() 사용:
const obj = { name: 'John' };
const correct = JSON.stringify(obj); // ✅ "{"name":"John"}"
이 오류가 발생하는 경우
- JavaScript 객체 리터럴을 복사하고 따옴표 변환을 잊음
- 적절한 편집기 없이 수동으로 JSON 입력
- 템플릿 리터럴을 잘못 사용
---
오류 #3: 따옴표 없는 키
문제
JavaScript에서는 객체 키가 유효한 식별자인 경우 따옴표 없이 사용할 수 있습니다. JSON은 모든 키가 큰따옴표로 묶인 문자열이어야 합니다.
❌ 유효하지 않은 JSON
{
name: "Alice",
age: 28,
isActive: true
}
{
user_id: 42,
"email": "test@example.com"
}
✅ 유효한 JSON
{
"name": "Alice",
"age": 28,
"isActive": true
}
{
"user_id": 42,
"email": "test@example.com"
}
나타날 오류 메시지
Unexpected token n in JSON at position 4
SyntaxError: Expected property name enclosed in double quotes
해결 방법
Visual Studio Code 사용자:찾기: (\w+):\s
바꾸기: "$1":
실제 예제
// 로깅 시 흔한 실수:
console.log({ status: 'success', data: result }); // 유효한 JS ✅
// 이것을 JSON으로 저장하려고 시도:
{
status: "success", // ❌ 유효하지 않은 JSON
data: { ... }
}
// 올바른 JSON:
{
"status": "success", // ✅
"data": { ... }
}
---
오류 #4: 유효하지 않은 이스케이프 시퀀스
문제
JSON은 제한된 이스케이프 시퀀스를 지원합니다. 유효하지 않은 것을 사용하거나 특수 문자를 이스케이프하는 것을 잊으면 구문 분석 오류가 발생합니다.
❌ 유효하지 않은 JSON
{
"path": "C:\Users\Alice\Documents",
"message": "Line 1
Line 2"
}
{
"quote": "He said "hello" to me"
}
✅ 유효한 JSON
{
"path": "C:\\Users\\Alice\\Documents",
"message": "Line 1\nLine 2"
}
{
"quote": "He said \"hello\" to me"
}
JSON의 유효한 이스케이프 시퀀스
| 문자 | 이스케이프 시퀀스 | 설명 |
|-----------|----------------|-------------|
| " | \" | 큰따옴표 |
| \ | \\ | 백슬래시 |
| / | \/ | 슬래시 |
| 줄바꿈 | \n | 라인 피드 |
| 탭 | \t | 수평 탭 |
| 캐리지 리턴 | \r | 캐리지 리턴 |
| 백스페이스 | \b | 백스페이스 |
| 폼 피드 | \f | 폼 피드 |
| 유니코드 | \uXXXX | 유니코드 문자 |
나타날 오류 메시지
Unexpected token in JSON at position 25
SyntaxError: Invalid escape sequence
해결 방법
JavaScript 이스케이프:// 이스케이프를 자동으로 처리:
const data = {
path: "C:\\Users\\Alice",
message: "Line 1\nLine 2"
};
const json = JSON.stringify(data);
// 결과: {"path":"C:\\\\Users\\\\Alice","message":"Line 1\\nLine 2"}
수동 경로 이스케이프:
const windowsPath = "C:\\Users\\Alice";
const jsonPath = windowsPath.replace(/\\/g, "\\\\");
---
오류 #5: JSON의 주석 (JSON ≠ JavaScript!)
문제
개발자는 문서화를 위해 JSON 파일에 주석을 추가하는 경우가 많지만 JSON은 어떤 종류의 주석도 지원하지 않습니다. //, / / 모두 불가합니다.
❌ 유효하지 않은 JSON
{
// 사용자 구성
"username": "admin",
"role": "superuser",
/ 이것은 임시입니다
프로덕션에서 제거 /
"debugMode": true
}
✅ 유효한 JSON (주석 허용 안 함)
{
"username": "admin",
"role": "superuser",
"debugMode": true
}
나타날 오류 메시지
Unexpected token / in JSON at position 4
SyntaxError: JSON does not support comments
해결 방법
옵션 1: 주석 필드 사용{
"_comment": "사용자 구성 - 프로덕션 전에 업데이트",
"username": "admin",
"role": "superuser",
"debugMode": true
}
옵션 2: JSON5 또는 JSONC 사용
구성 파일의 경우 다음을 고려하세요:
- JSON5: 주석, 후행 쉼표 등을 지원
- JSONC: 주석이 있는 JSON (VS Code에서 사용)
// config.json5
{
// 사용자 구성
username: "admin", // 따옴표 불필요
role: "superuser",
debugMode: true, // 후행 쉼표 OK!
}
옵션 3: 별도의 문서 파일
project/
├── config.json # 순수 JSON
├── config.README.md # 주석이 있는 문서
---
보너스: JSON 오류를 조기에 발견하는 방법
1. 온라인 검증기 사용
BigJSON Validator - 도움이 되는 오류 메시지로 즉시 검증:- JSON을 붙여넣기
- 줄별 오류 감지
- 정확히 어디에 문제가 있는지 확인
2. IDE 확장
VS Code:- 내장 JSON 검증
- 인라인 오류 메시지를 위한 "Error Lens" 설치
- JSONLint 패키지
- linter-jsonlint
3. Pre-Commit 후크
# .git/hooks/pre-commit
#!/bin/bash
for file in $(git diff --cached --name-only | grep -E '\.json$'); do
if ! python -m json.tool "$file" > /dev/null 2>&1; then
echo "Invalid JSON in $file"
exit 1
fi
done
4. 자동화된 테스트
// Jest 테스트
test('config.json이 유효함', () => {
const fs = require('fs');
const config = fs.readFileSync('config.json', 'utf8');
expect(() => {
JSON.parse(config);
}).not.toThrow();
});
---
빠른 참조: 오류 감지 체크리스트
JSON 파일을 제출하거나 배포하기 전에 확인:
- [ ] 마지막 항목 뒤에 후행 쉼표 없음
- [ ] 모든 문자열에 큰따옴표 사용 (
") - [ ] 모든 객체 키에 따옴표
- [ ] 특수 문자가 적절히 이스케이프됨
- [ ] 어디에도 주석 없음
- [ ] 중괄호와 대괄호의 적절한 중첩
- [ ] 유효한 데이터 유형 (문자열, 숫자, 부울, null, 객체, 배열)
- [ ] 숫자에 선행 0이 없음 (
0.x제외)
---
JSON 오류를 방지하는 도구
1. BigJSON 온라인 도구
BigJSON을 방문하여:- 포맷터: 포맷 문제 자동 수정
- 검증기: 즉시 구문 확인
- 최소화기: 프로덕션용 공백 제거
2. 명령줄 도구
# Node.js 내장 검증기
node -e "JSON.parse(require('fs').readFileSync('file.json'))"
# Python 검증기
python -m json.tool file.json
# jq (JSON 프로세서)
jq . file.json
3. 브라우저 개발자 도구
// 콘솔 검증
try {
JSON.parse(jsonString);
console.log('✅ 유효한 JSON');
} catch (e) {
console.error('❌ 유효하지 않음:', e.message);
}
---
일반적인 오류 메시지 해독
| 오류 메시지 | 가능성 있는 원인 | 수정 |
|--------------|-------------|-----|
| Unexpected token , | 후행 쉼표 | } 또는 ] 앞의 쉼표 제거 |
| Unexpected token ' | 작은따옴표 | 큰따옴표로 교체 |
| Expected property name | 따옴표 없는 키 | 모든 객체 키에 따옴표 |
| Unexpected token } | 누락된 쉼표 | 항목 사이에 쉼표 추가 |
| Unexpected end of JSON | 닫히지 않은 중괄호/대괄호 | 중첩 확인 |
| Invalid escape sequence | 잘못된 이스케이프 문자 | 유효한 이스케이프 사용 (\\, \n 등) |
---
실제 예제: API 응답 디버깅
여러 오류가 있는 실제 API 응답을 수정해 봅시다:
❌ 이전 (유효하지 않음)
{
success: true, // 오류: 따옴표 없는 키
'message': 'Data retrieved', // 오류: 작은따옴표
data: [
{
id: 1,
name: "Product A",
price: 29.99,
}, // 오류: 후행 쉼표
{
id: 2,
name: "Product B",
// 참고: 특별 행사 // 오류: 주석
price: 19.99
}
], // 오류: 후행 쉼표
}
✅ 이후 (유효함)
{
"success": true,
"message": "Data retrieved",
"data": [
{
"id": 1,
"name": "Product A",
"price": 29.99
},
{
"id": 2,
"name": "Product B",
"price": 19.99
}
]
}
---
워크플로에서 오류 방지
개발자용
// 수동 연결 대신 항상 JSON.stringify() 사용
const config = {
apiKey: process.env.API_KEY,
timeout: 5000
};
// ❌ 수동 (오류 발생 가능)
const json = '{ "apiKey": "' + config.apiKey + '", "timeout": ' + config.timeout + ' }';
// ✅ 자동 (안전)
const json = JSON.stringify(config);
구성 파일용
API 응답용
// Express.js 예제
app.get('/api/data', (req, res) => {
const data = { status: 'ok', results: [...] };
// ❌ 수동 문자열 빌드
res.send('{"status":"' + data.status + '"}');
// ✅ 자동 JSON 직렬화
res.json(data); // 이스케이프, 따옴표 등 처리
});
---
결론
5가지 가장 일반적인 JSON 구문 오류는:
} 및 ] 앞의 쉼표 제거")다음 단계
JSON 오류에 대한 질문이 있으신가요? 아래에 댓글을 남겨주세요!
---
관련 리소스
---
최종 업데이트: 2026년 2월 15일관련 글
JSON 포맷하는 방법: 완벽 가이드 2026
JSON을 올바르게 포맷하는 방법을 배우세요. 온라인 도구, IDE 설정, 명령줄 도구 및 프로그래밍 방식 포맷팅에 대한 종합 가이드입니다.
일반적인 JSON 오류와 해결 방법: 완벽 디버깅 가이드
JSON 파싱 오류를 빠르게 찾고 수정하는 방법을 배워보세요. 일반적인 실수, 디버깅 도구, 예방 방법까지 완벽 정리.
JSON 형식 및 유효성 검사: 완전한 모범 사례 가이드 2026
포괄적인 가이드로 JSON 형식 지정, 유효성 검사 및 비교를 마스터하세요. 온라인에서 JSON 형식을 지정하고, JSON 스키마를 검증하고, JSON 파일을 비교하고, 업계 모범 사례를 따르는 방법을 배우세요.