자바스크립트 객체나 파이썬 딕셔너리는 다음과 같은 형식을 사용한다.
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
}
마지막 요소 뒤에도 컴마가 따라오는 것을 볼 수 있다.
이를 트레일링 콤마라고 하며 작성 및 유지보수의 일관성 및 편의성을 제공하기 때문에 자바스크립트나 파이썬처럼 동적인 스크립트 언어에서는 이를 허용한다.
하지만 JSON에서는 트레일링 컴마가 허용되지 않는다. JSON은 자바스크립트 객체나 파이썬 딕셔너리와 비슷한 형식을 가지고 있지만 데이터 교환 형식이기 때문에 엄격한 문법 규칙을 따른다.
이는 일관된 형식을 유지하고 데이터 무결성을 유지하기 위해서인데, 중요한 차이점으로는 반드시 큰따옴표(double quotes)만이 허용되고 트레일링 콤마가 허용되지 않는다는 것이다.
만약 JSON.stringify
와 같은 직렬화 메서드를 사용한다면 JSON의 엄격함이 체감되지 않을 수도 있다. 직렬화 과정에서 자동으로 문법 오류를 수정하고 올바른 JSON 형식의 문자열을 생성해 주기 때문이다.
하지만 Postman이나 Thunder client을 사용해 API 요청을 보낼 때, Body안에 raw JSON, 즉 JSON을 직접 작성해야 한다. 이 때, JSON의 엄격함을 인지하고 있지 않다면 문제에 직면하게 될 것이다.
잘못된 JSON 문자열을 전달하면 서버는 400 Bad Request와 함께 다음과 같은 오류 메시지를 보낸다.
{
"detail": "JSON parse error - Expecting property name enclosed in double quotes: ..."
}
JSON 문자열을 파싱하는 과정에서 속성 이름이 큰따옴표 안에 있지 않았다는 의미이다. 트레일링 컴마를 사용해도 이런 에러가 발생할 수 있으니 주의해야 한다.