JSON의 후행 쉼표 고치기

객체의 마지막 속성이나 배열의 마지막 항목 뒤의 후행 쉼표는 일부 JavaScript 환경에서는 허용되지만, JSON에서는 유효하지 않습니다.

왜 오류가 발생하는가

JavaScript 객체 리터럴은 마지막 콤마를 자주 허용하지만, JSON은 마지막 항목 뒤에 곧장 닫는 괄호나 중괄호가 와야 합니다.

잘못된 예

{ "name": "Ada", "active": true, }

수정된 JSON

{ "name": "Ada", "active": true }

후행 콤마는 어디서 오는가

대부분 누군가 설정 파일을 손으로 편집해 마지막 항목을 주석 처리했거나, JavaScript/TypeScript에서 붙여 넣을 때 생깁니다. 템플릿 엔진이나 코드 생성기가 마지막 인덱스를 추적하지 않고 모든 항목 뒤에 콤마를 찍을 때도 발생합니다.

왜 어떤 파서는 허용하고 JSON은 허용하지 않는가

JavaScript 객체 리터럴, JSON5, JSONC, YAML, 그리고 대부분 언어의 리터럴 문법은 diff를 깔끔하게 하려고 후행 콤마를 허용합니다. RFC 8259 JSON은 의도적으로 허용하지 않습니다 — JSON.parse, Go의 encoding/json, Python의 json 모듈 같은 엄격한 파서들은 모두 거부합니다.

프로덕션 전에 후행 콤마 찾기

CI에서 엄격한 JSON 파서(jq, python -m json.tool, node -e 'JSON.parse(...)')로 설정 파일을 lint하세요. TypeScript 리포지토리에서는 .json 파일에 대해 Prettier의 "trailingComma"를 "none"으로 설정해 포매터가 후행 콤마를 넣지 않도록 하세요.

후행 콤마가 진짜 버그가 아닐 때

API나 JSON을 만들어 내는 라이브러리에서 온 payload에 후행 콤마가 있다면, 문제는 소비 측이 아니라 상류의 직렬화에 있습니다. 로컬에서 콤마만 고치는 것은 생산자 쪽 버그를 가리는 일이라 다음 호출에서 다시 나타납니다 — 생산자를 고치세요.

FAQ

Q: JSON.parse가 언젠가 후행 콤마를 받아들일까요? A: 아니요 — 엄격 모드가 표준입니다. Q: JSON5는 안전한 대안인가요? A: 사람이 편집하는 설정에만 좋고, 통신 프로토콜에는 절대 쓰지 마세요. Q: 자동 수리 도구로 후행 콤마만 제거할 수 있나요? A: 네, JSON을 붙여 넣으면 다른 흔한 구문 오류와 함께 제거됩니다.