V8 Node v24.15.0, V8 13.6.233.17에서 파서를 실행해 확인했습니다.
Expected ',' or '}' after property value in JSON at position N (line L column C)
파서가 객체 안에서 값을 다 읽고, 멤버 목록이 쉼표로 이어지거나 중괄호로 끝나기를 기다렸습니다. 그런데 다른 것이 왔습니다. 이 메시지는 객체 내부에 대한 V8의 포괄적인 안내라서, 서로 다른 여러 실수를 한데 묶고 있습니다.
JSON을 붙여넣고 어디서 깨지는지 정확히 확인하기
입력
붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기
실제 원인
어느 쪽이 답인 경우가 많은지, 그 순서대로 정리했습니다.
-
01 속성 사이의 쉼표 누락
가장 흔한 원인이고, 보통 손으로 편집한 결과입니다.
깨지는 예
{ "a": 1 "b": 2 }되는 예
{ "a": 1, "b": 2 } -
02 파일이 잘림
보고된 위치가 입력의 맨 끝이라면, 값 뒤에 아무것도 없었다는 뜻입니다. 그건 문법 실수가 아니라 잘린 문서입니다. 저희 검증기는 둘을 구별하고 어떤 괄호가 열린 채 남았는지 나열합니다.
깨지는 예
{ "a": 1되는 예
{ "a": 1 } -
03 값 뒤의 주석
JSON에는 주석이 없어서, 값 뒤의 "// 메모"가 이 오류를 냅니다.
-
04 16진수 등 JSON에 없는 형태의 숫자
파서는 0을 완결된 숫자로 읽고 나서 x를 만납니다. 그건 쉼표도 중괄호도 아닙니다. JSON에는 16진 리터럴이 없습니다.
깨지는 예
{ "mask": 0x1F }되는 예
{ "mask": 31 }
다른 런타임에서의 같은 실수
밑바탕의 문제는 똑같고, 다른 건 문구뿐입니다. 동료가 이 중 하나를 들고 왔다면, 그 사람이 보고 있는 건 여러분이 보는 것과 같습니다.
| Python | Expecting ',' delimiter: line 1 column 10 (char 9) |
|---|---|
| V8, inside an array | Expected ',' or ']' after array element in JSON at position N |
자주 묻는 질문
- 쉼표 누락과 잘린 파일은 어떻게 구별하나요?
- 보고된 위치를 입력의 길이와 비교해 보세요. 같다면 문서가 일찍 끝난 것입니다. 저희 검증기는 둘 중 무엇인지 알려 주고, 잘린 문서라면 닫히지 않은 괄호 하나하나와 그것이 열린 줄까지 짚어 줍니다.