JSON 파싱 오류, 흔한 원인 8가지와 고치는 법
멀쩡해 보이는 JSON인데 Unexpected token이라며 프로그램이 멈춘 적 있으신가요? JSON 파싱 오류의 원인은 놀랄 만큼 몇 가지로 정해져 있습니다. 수백 번의 오류를 만나 봐도 결국 이 여덟 가지 안에서 돕니다. 하나씩 예시와 함께 보고, 오류 메시지에서 문제 위치를 읽어 내는 요령까지 정리합니다.
최종 업데이트: 2026년 7월
1. 먼저: 오류 메시지에서 위치 읽는 법
브라우저나 프로그램이 내는 JSON 오류 메시지에는 대부분 위치가 함께 적혀 있습니다.
크롬 계열은 at position 12 (line 2 column 3)처럼, 파이어폭스는
at line 2 column 3처럼 표기합니다.
- line은 몇 번째 줄, column은 그 줄에서 몇 번째 칸(글자)인지입니다. 둘 다 1부터 셉니다.
- position은 문서 맨 앞에서부터 센 글자 번호입니다. 한 줄짜리 JSON에서는 이 숫자만 주어지는 경우가 많습니다.
한 가지 함정이 있습니다. 표시된 위치는 “파서가 포기한 지점”이라서, 진짜 원인은 그보다 조금 앞에 있는 경우가 많습니다. 예를 들어 쉼표가 빠졌다면 오류는 그다음 항목이 시작되는 자리에서 납니다. 위치 근처를 앞쪽으로 한두 항목 거슬러 보는 습관을 들이세요.
2. 따옴표가 범인인 세 가지
원인 1. 작은따옴표 사용. JSON의 문자열과 키는 큰따옴표(")만
허용합니다. 파이썬이나 자바스크립트 코드에서 복사해 오면 흔히 걸립니다.
{ 'name': '홍길동' } ← 오류
{ "name": "홍길동" } ← 올바름
원인 2. 키에 따옴표 누락. 자바스크립트 코드에서는
{name: "홍길동"}이 되지만 JSON에서는 키를 따옴표로 감싸야 합니다.
오류 메시지에 Expected property name이 보이면 대개 이 경우입니다.
원인 3. 이스케이프 안 된 따옴표와 줄바꿈. 문자열 값 안에 큰따옴표가
들어가면 \"로, 줄바꿈은 엔터 대신 \n으로 적어야 합니다.
{ "quote": "그는 "안녕"이라 말했다" } ← 오류
{ "quote": "그는 \"안녕\"이라 말했다" } ← 올바름
문자열 안에서 진짜 엔터를 치면 Bad control character 계열의 오류가 납니다.
여러 줄 텍스트를 값으로 넣을 때 자주 겪는 문제입니다.
3. 쉼표와 주석, 습관이 만드는 두 가지
원인 4. 꼬리 쉼표(트레일링 콤마). 마지막 항목 뒤의 쉼표는 JSON에서 허용되지 않습니다. 항목을 지우거나 순서를 바꾸다가 남기 쉬워서, 체감상 가장 흔한 오류입니다.
{
"a": 1,
"b": 2, ← 이 쉼표가 오류
}
원인 5. 주석 삽입. JSON에는 주석이 없습니다. //나
/* */를 만나는 순간 파싱이 멈춥니다. 설정 파일에 메모를 남기고 싶어서
넣었다가 걸리는 전형적인 경우입니다. VS Code의 settings.json처럼 주석을 허용하는 파일은
사실 JSON이 아니라 JSONC라는 확장 문법을 쓰는 것이라, 표준 JSON 자리에 그대로 옮기면
오류가 됩니다.
4. 잘린 JSON과 보이지 않는 문자
원인 6. 잘린 JSON. Unexpected end of JSON input이라는
메시지는 문서가 중간에 끝났다는 뜻입니다. 로그에서 복사하다가 뒷부분이 잘렸거나,
응답이 길어서 화면에 일부만 표시된 것을 복사한 경우가 대부분입니다. 닫는 괄호
}, ]의 짝이 맞는지 끝부분을 확인하세요.
원인 7. BOM과 보이지 않는 문자. 어떤 편집기는 파일 맨 앞에 BOM이라는
보이지 않는 표식 문자를 붙입니다. 눈에는 안 보이는데 파서는 “1번째 칸에 이상한 문자가 있다”고
합니다. 웹에서 복사한 텍스트에 섞이는 전각 공백(일반 공백처럼 보이는 넓은 공백)이나
둥근따옴표(“ ”)도 같은 부류입니다. 눈으로는 찾기 어려워서 도구의 도움이
필요한 오류입니다.
5. 자바스크립트 전용 값이 섞인 경우
원인 8. undefined, NaN 같은 JS 전용 값. 자바스크립트 콘솔에서 객체를
복사하면 undefined나 NaN이 섞여 나올 수 있는데, 둘 다 JSON에는
존재하지 않는 값입니다. 파이썬에서 넘어온 True, False,
None도 마찬가지로 JSON 표기가 아닙니다.
{ "count": NaN, "memo": undefined, "done": True } ← 전부 오류
{ "count": 0, "memo": null, "done": true } ← 올바름
“값 없음”은 null로, 참/거짓은 소문자 true/false로
바꿔 적으면 됩니다.
6. 도구는 오류를 어떻게 짚어주나
여덟 가지를 다 외울 필요는 없습니다. JSON 포맷터·검증기에 붙여넣으면 붙여넣는 즉시 검사해서, 오류가 있으면 이렇게 알려줍니다.
- 줄·칸 위치를 화살표로 표시: 몇 번째 줄 몇 번째 칸이 문제인지, 해당 코드 조각 아래에 화살표로 짚어줍니다. 영어 오류 메시지를 한국어 설명으로 풀어 주기도 합니다.
- 흔한 실수는 자동 고침: 꼬리 쉼표, 주석, 작은따옴표, 따옴표 없는 키, 파이썬식 True/False/None, 문자열 안의 진짜 줄바꿈, BOM, 둥근따옴표, 전각 공백처럼 정해진 유형이라면 자동 고침 버튼 한 번으로 표기만 바로잡아 줍니다. 값 자체는 건드리지 않고, 무엇을 고쳤는지 목록으로 보여줍니다.
자동 고침이 손대지 못하는 오류도 있습니다. 짝이 안 맞는 괄호나 잘린 JSON처럼 어디까지가 원래 데이터인지 도구가 판단할 수 없는 경우인데, 이때는 위치를 짚어주니 그 지점을 직접 확인하면 됩니다.
오류 나는 JSON을 그대로 붙여넣어 보세요. 어디가 왜 틀렸는지 한국어로 알려주고, 흔한 실수는 버튼 한 번에 고쳐 줍니다.
JSON 오류 검사하러 가기7. 자주 묻는 질문
오류 위치에 가 봤는데 멀쩡해 보여요.
표시된 위치는 파서가 멈춘 지점이지 원인 그 자체가 아닐 수 있습니다. 빠진 쉼표나 안 닫힌 따옴표는 그다음 내용이 시작되는 자리에서 오류를 냅니다. 표시 지점에서 앞쪽으로 한두 항목 거슬러 올라가며 따옴표와 쉼표의 짝을 확인해 보세요.
내부 데이터가 든 JSON인데 온라인 도구에 붙여넣어도 되나요?
이 사이트의 JSON 포맷터·검증기는 검사와 정리를 전부 브라우저 안에서만 처리하고 내용을 서버로 전송하지 않습니다. 다만 다른 온라인 도구는 처리 방식이 제각각이니, 민감한 데이터라면 서버 전송 여부를 먼저 확인하는 습관이 안전합니다.
주석 있는 설정 파일(JSONC)은 검사가 안 되나요?
표준 JSON 기준으로는 주석 자리에서 오류가 나지만, 자동 고침을 누르면 주석과 꼬리 쉼표를 제거해 표준 JSON으로 바꿔 줍니다. 사실상 JSON5·JSONC를 표준 JSON으로 변환하는 용도로도 쓸 수 있습니다.
긴 숫자의 끝자리가 바뀌는 것도 오류인가요?
문법 오류는 아니지만 주의할 점입니다. 브라우저의 자바스크립트는 정수를 약 15~16자리까지만 정확히 다루기 때문에, 그보다 긴 숫자는 끝자리가 반올림될 수 있습니다. 이 도구는 그런 긴 숫자를 발견하면 경고를 띄워 줍니다. 원본 시스템에서 문자열로 다루는 것이 안전합니다.