V8 Node v24.15.0, V8 13.6.233.17에서 파서를 실행해 확인했습니다.
Expected double-quoted property name in JSON at position N (line L column C)
파서가 객체 안에서 쉼표를 읽고 다음에 또 다른 속성 이름이 올 것이라 기대했는데, 닫는 중괄호를 만났습니다. 다시 말해 뒤에 아무것도 없는 쉼표가 있다는 뜻입니다. 메시지는 여러분이 무엇을 잘못했는지가 아니라 파서가 무엇을 원했는지를 말하고, 그래서 문구만으로는 해결책이 보이지 않습니다.
이렇게 적힌 것을 보게 될 수도 있습니다
- trailing comma json error
- trailing comma not allowed in json
V8은 2022년에 JSON 오류 메시지 대부분을 다시 썼습니다. 검색 결과에 나오는 건 여전히 옛 문구가 대부분이지만, 지금의 어떤 런타임도 그 문구를 내보내지 않습니다.
JSON을 붙여넣고 어디서 깨지는지 정확히 확인하기
입력
붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기
실제 원인
어느 쪽이 답인 경우가 많은지, 그 순서대로 정리했습니다.
-
01 닫는 중괄호 앞의 끝쉼표
JavaScript, JSON5, JSONC에서는 합법입니다. JSON에서는 아닙니다. JavaScript 객체를 자동 정렬하는 편집기는 이것을 경고 없이 붙입니다.
깨지는 예
{ "name": "Priya", "role": "admin", }되는 예
{ "name": "Priya", "role": "admin" } -
02 쉼표가 두 번 연달아
보통 속성을 지우고 나서 남는 경우입니다.
깨지는 예
{ "a": 1,, "b": 2 }되는 예
{ "a": 1, "b": 2 } -
03 속성 이름이 와야 할 자리에 주석
JSON에는 주석이 없습니다. 객체 안의 // 줄이나 /* */ 블록은 똑같은 메시지를 냅니다. 파서는 따옴표가 붙은 키를 기다리고 있었는데 슬래시를 만났기 때문입니다.
다른 런타임에서의 같은 실수
밑바탕의 문제는 똑같고, 다른 건 문구뿐입니다. 동료가 이 중 하나를 들고 왔다면, 그 사람이 보고 있는 건 여러분이 보는 것과 같습니다.
| V8, trailing comma in an ARRAY | Unexpected token ']', "[1,2,]" is not valid JSON |
|---|---|
| Python 3.13 and later | Illegal trailing comma before end of object: line 1 column 7 (char 6) |
| Python 3.12 and earlier | Expecting property name enclosed in double quotes: line 1 column 7 (char 6) |
자주 묻는 질문
- 배열일 때는 왜 메시지가 다른가요?
- 파서의 상태가 다르기 때문입니다. 객체 안에서는 따옴표 붙은 키를 기다리고 있으니 그렇게 말합니다. 배열 안에서는 값을 기다리다가 닫는 대괄호를 만나서 Unexpected token ']', "[1,2,]" is not valid JSON 이 됩니다. 같은 실수인데 완전히 다른 두 메시지입니다.
- 파이썬은 예전에 이걸 다른 오류로 냈습니다. 바뀐 건가요?
- 바뀌었습니다. 파이썬 3.13에서 전용 메시지가 추가됐습니다. "Illegal trailing comma before end of object"와 배열용 대응 메시지입니다. 3.12 이하에서는 같은 입력이 "Expecting property name enclosed in double quotes"를 냅니다. 버전을 나누지 않은 안내는 독자의 절반에게 틀린 셈입니다.
- 설정 파일에 주석과 끝쉼표가 필요합니다. 선택지가 있나요?
- VS Code가 자체 설정에 쓰는 JSONC를 쓰면 주석과 끝쉼표가 됩니다. JSON5는 훨씬 더 많은 것을 허용합니다. 둘 다 그것을 지원하는 파서가 필요합니다. 저희 복구 도구는 어느 쪽이든 엄격한 JSON으로 되돌려 줍니다.