SyntaxError: Unterminated string in JSON at position N 는 파서가 문자열을 읽기 시작했고(여는 " 를 봤음), 닫는 " 를 찾기 전에 입력의 끝 —— 또는 줄바꿈 —— 에 도달했다는 뜻입니다. 문자열이 닫히지 않았습니다. 원인과 해결법을 정리합니다.
어떤 문자열 에러를 만났나요?
- Unterminated string ——
"로 시작한 문자열이 닫히지 않음. - Bad control character —— 이스케이프되지 않은 원시 tab/개행/null 바이트가 문자열 안에 들어 있음.
- Bad escaped character ——
\뒤에 JSON이 허용하지 않는 것이 옴(예:\x, Windows 경로).
에러는 어떻게 보이나
// V8 (Chrome / Node / Edge)
SyntaxError: Unterminated string in JSON at position 27
// Firefox
SyntaxError: JSON.parse: unterminated string at line 2 column 10 of the JSON data
// Safari
SyntaxError: JSON Parse error: Unterminated string위치는 닫히지 않은 문자열의 여는 따옴표(또는 그 바로 뒤)를 가리킵니다 —— 거기서부터 앞으로 보세요.
왜 발생하는가
원인 1 —— 이스케이프되지 않은 따옴표가 문자열을 일찍 끝냄
값 안의 그냥 " 는 문자열을 일찍 닫습니다; 줄의 나머지는 예상치 못한 토큰으로 읽히고, 실제 문자열은 '열린 채' 남습니다.
// ❌ 깨짐 —— hello 앞의 따옴표가 "He said " 를 닫음
{ "note": "He said "hello" to her" }
// ✅ 수정 —— 내부 따옴표를 백슬래시로 이스케이프
{ "note": "He said \"hello\" to her" }원인 2 —— 문자열 안의 원시 줄바꿈
JSON 문자열은 원시 줄바꿈을 가로지를 수 없습니다. 리터럴 줄바꿈은 문자열을 끊고 닫히지 않게 둡니다.
// ❌ 깨짐 —— 문자열 안에 실제 줄바꿈
{ "bio": "line one
line two" }
// ✅ 수정 —— \n 이스케이프 사용, 원시 줄바꿈 없음
{ "bio": "line one\nline two" }원인 3 —— 데이터가 잘림
문자열 중간에서 끊긴 응답(연결 끊김, 버퍼/크기 한계, 부분 읽기)은 입력 끝에 문자열을 열어 둔 채로 남깁니다.
// 도착한 내용(연결이 끊김):
{"user":{"name":"Ada Lovel
// → Unterminated string고치는 단계
- 보고된 위치로 가서 짝이 없는 여는
"를 찾으세요. - 값 안의 이스케이프되지 않은
"를 찾아\"로 이스케이프하세요. - 값 안의 원시 줄바꿈/탭을 찾아
\n/\t로 바꾸세요. - 잘림을 확인하세요 —— 바이트 길이를
Content-Length와 비교; 짧다면 데이터가 잘린 것입니다(코드 수정 사안, 텍스트 수정 아님). - JSON을 손으로 짜지 마세요.
JSON.stringify()가 따옴표와 제어 문자를 알아서 이스케이프해 줍니다.
// 예방: 문자열 연결로 JSON을 만들지 마세요
const json = JSON.stringify({ note: userInput }); // 항상 유효자주 묻는 질문
'Unterminated string in JSON' 의 원인은?
여는 " 에 짝이 되는 닫는 " 가 없음 —— 보통은 값 안의 이스케이프되지 않은 따옴표, 원시 줄바꿈, 또는 문자열 중간에서 잘린 응답.
JSON 문자열 안에 따옴표나 줄바꿈을 어떻게 넣나요?
이스케이프하세요: 큰따옴표는 \", 개행은 \n, 탭은 \t. JSON.stringify() 로 JSON을 만들면 자동으로 처리됩니다.
'Unexpected end of JSON input' 과 같은가요?
관련은 있지만 다릅니다. 'Unterminated string' 은 문자열 이 열려 있다는 뜻; 'Unexpected end of JSON input' 은 구조 전체(객체/배열)가 일찍 끝났다는 뜻. 잘린 응답은 둘 다 유발할 수 있습니다.
지금 고치기
- JSON Fix —— 브라우저에서 닫히지 않은 문자열을 찾아 수리
- Unexpected End of JSON Input —— 구조 전체가 잘린 경우
- JSON 문자열 리터럴의 Bad Control Character —— 문자열 안의 원시 tab/개행
- JSON 의 Bad Escaped Character —— 잘못된 백슬래시 이스케이프