일반적인 JSON 구문 오류 및 유효성 검사기를 사용한 해결 방법
일반적인 JSON 오류
JSON의 엄격한 구문 규칙은 단 하나의 잘못된 문자라도 전체 문서를 망가뜨릴 수 있음을 의미합니다. 가장 일반적인 JSON 오류를 이해하면 더 빠르게 디버깅하고 동일한 실수를 반복하지 않을 수 있습니다. 아래는 개발자가 가장 자주 겪는 문제와 각각에 대한 명확한 설명 및 해결 방법입니다.
1. 후행 쉼표
오류: 객체나 배열 끝에서 Unexpected token
후행 쉼표는 JavaScript 객체와 배열에서는 허용되지만 JSON에서는 엄격히 금지됩니다.
유효하지 않은 JSON:
{
"name": "Alice",
"age": 30,
}
해결 방법: 마지막 항목 뒤의 쉼표를 제거하세요.
{
"name": "Alice",
"age": 30
}
후행 쉼표가 있는 배열:
// 유효하지 않음
[1, 2, 3,]
// 유효함
[1, 2, 3]
2. 키 주위의 누락되거나 잘못된 따옴표
오류: Unexpected identifier 또는 Expected double-quoted property name
JSON은 모든 객체 키가 큰따옴표로 묶여야 합니다. 작은따옴표와 따옴표 없는 키는 JavaScript에서는 작동하더라도 유효하지 않습니다.
유효하지 않은 JSON:
{
name: "Alice",
'occupation': "Engineer"
}
해결 방법: 항상 키를 큰따옴표로 묶으세요.
{
"name": "Alice",
"occupation": "Engineer"
}
3. 문자열 값에 작은따옴표 사용
오류: Unexpected identifier 또는 Unterminated string
키와 마찬가지로, 문자열 값도 JSON에서는 큰따옴표를 사용해야 합니다. 작은따옴표는 유효하지 않습니다.
유효하지 않은 JSON:
{ "greeting": 'Hello, world!' }
해결 방법: 작은따옴표를 큰따옴표로 바꾸세요.
{ "greeting": "Hello, world!" }
팁: 문자열에 큰따옴표가 포함된 경우 백슬래시로 이스케이프 처리하세요: "He said, \"Hello\"".
4. 이스케이프 처리되지 않은 특수 문자
오류: Unexpected token 또는 Invalid character
JSON 문자열에서는 특정 문자를 이스케이프 처리해야 합니다: 큰따옴표("), 백슬래시(\), 제어 문자.
유효하지 않은 JSON:
{
"path": "C:\Users\Documents\file.json",
"quote": "He said "hello""
}
해결 방법: 백슬래시와 큰따옴표를 올바르게 이스케이프 처리하세요.
{
"path": "C:\\Users\\Documents\\file.json",
"quote": "He said \"hello\""
}
JSON 이스케이프 시퀀스 전체 목록
| 시퀀스 | 나타내는 문자 |
|----------|-----------|
| \" | 큰따옴표 |
| \\ | 백슬래시 |
| \/ | 슬래시 |
| \b | 백스페이스 |
| \f | 폼 피드 |
| \n | 줄 바꿈 |
| \r | 캐리지 리턴 |
| \t | 탭 |
| \uXXXX | 유니코드 문자 (예: é는 e) |
5. 유효하지 않은 숫자 형식
오류: Unexpected number 또는 Invalid number
JSON에는 숫자 형식에 대한 특정 규칙이 있습니다:
- 앞에 0을 붙일 수 없습니다 (
01은 유효하지 않음) - 단일 앞자리 0은 숫자
0에만 허용됩니다 - 숫자는 뒤에 점을 붙일 수 없습니다 (
10.은 유효하지 않음) - 16진수, 8진수, 2진수 형식은 지원되지 않습니다
유효하지 않은 JSON:
{
"invalid1": 01,
"invalid2": 10.,
"invalid3": 0xFF,
"invalid4": 1,000
}
해결 방법:
{
"valid1": 1,
"valid2": 10.0,
"valid3": 255,
"valid4": 1000
}
6. 유효하지 않은 값: undefined, NaN, Infinity
오류: undefined, NaN, Infinity에 대한 Unexpected token
JavaScript에는 JSON에 해당하는 표현이 없는 값들이 있습니다. 이들은 파싱 오류를 발생시킵니다:
유효하지 않은 JSON:
{
"undefinedVal": undefined,
"notANumber": NaN,
"infinity": Infinity
}
해결 방법: 유효한 JSON 값으로 바꾸거나 규칙을 사용하세요.
{
"undefinedVal": null,
"notANumber": null,
"infinity": 1.7976931348623157e+308
}
7. 추가 쉼표 또는 누락된 쉼표
오류: Expected comma 또는 Unexpected token
JSON의 쉼표는 모든 키/값 쌍과 배열 요소를 구분해야 하지만, 마지막 항목 뒤에 나타나서는 안 됩니다.
누락된 쉼표 (유효하지 않음):
{
"name": "Alice"
"age": 30
}
해결 방법: 누락된 쉼표를 추가하세요.
{
"name": "Alice",
"age": 30
}
8. 깊게 중첩된 구조 문제
오류: Maximum call stack size exceeded 또는 파서 타임아웃
구문 오류는 아니지만, 깊게 중첩된 JSON(10단계 이상)은 성능 문제를 일으키고 디버깅을 매우 어렵게 만들 수 있습니다.
문제가 있는 구조:
{
"level1": {
"level2": {
"level3": {
"level4": {
"level5": {
"level6": {
"value": "too deep"
}
}
}
}
}
}
}
더 나은 접근 방식: 구조를 평탄화하거나 참조를 사용하세요.
{
"users": {
"alice": { "role": "admin" }
},
"permissions": {
"admin": ["read", "write", "delete"]
}
}
9. 누락된 여는 중괄호 또는 닫는 중괄호
오류: Expected ',' or '}' 또는 Unexpected end of JSON input
일치하지 않는 중괄호와 대괄호는 특히 대규모 또는 수동으로 작성된 JSON 파일에서 JSON 오류의 일반적인 원인입니다.
유효하지 않은 JSON:
{
"name": "Alice",
"items": [1, 2, 3
}
해결 방법: 모든 {에 일치하는 }가, 모든 [에 일치하는 ]가 있는지 확인하세요.
{
"name": "Alice",
"items": [1, 2, 3]
}
프로 팁: JSON을 적절히 들여쓰기하여 여는 괄호와 닫는 괄호를 시각적으로 일치시키세요. JSON 포맷터가 이를 자동으로 수행할 수 있습니다.
JSON 오류를 효과적으로 디버깅하는 방법
- JSON 유효성 검사기 사용 -- 무료 JSON 유효성 검사기에 JSON을 붙여넣어 첫 번째 오류의 정확한 줄과 열을 확인하세요.
- 점진적으로 유효성 검사 -- 대용량 파일의 경우 한 섹션씩 유효성 검사를 수행하여 오류를 격리하세요.
- 복사-붙여넣기 아티팩트 주의 -- 보이지 않는 문자, 스마트 따옴표, 줄 바꿈 없는 공백이 워드 프로세서나 웹 페이지에서 몰래 들어오는 경우가 많습니다.
- 문자 인코딩 확인 -- 파일이 UTF-8로 저장되었는지 확인하세요. 다른 인코딩은 보이지 않는 오류를 생성할 수 있습니다.
- 린터 사용 --
json플러그인이 포함된 ESLint와 같은 도구는 개발 중에 JSON 오류를 잡아냅니다.
기억하세요: JSON 파서는 일반적으로 첫 번째 구문 오류만 보고합니다. 해당 오류를 수정하고, 다시 유효성 검사를 수행하고, 문서가 통과할 때까지 반복하세요. 저희 JSON 포맷터 & 유효성 검사기 도구는 이 과정을 가속화하기 위해 즉각적이고 상세한 오류 메시지를 제공합니다.