·오류 문구 사전

chrome · JavaScript

오류 문구

SyntaxError: Unexpected end of JSON input

무슨 뜻인가

JSON을 읽다가 문서가 끝나 버렸다는 뜻이고, 거의 언제나 몸통이 아예 비어 있었던 것입니다. 204 No Content나 본문 없는 오류 응답에 res.json()을 부른 경우, 응답 본문을 이미 한 번 읽어 두 번째에는 빈 것이 온 경우, 또는 쓰다 말고 끊긴 파일을 읽은 경우입니다. 먼저 텍스트로 받아서 비었는지 보고 나서 파싱하면 정확한 진단이 됩니다 — const t = await res.text(); if (!t) return null;. JSON.parse(text || 'null')처럼 기본값으로 덮는 것은 빈 응답을 정상으로 만들어 버리니, 서버가 왜 빈 몸통을 보냈는지 먼저 확인하세요.

고치는 명령

한 줄 명령으로 끝나지 않습니다. 설명에 무엇을 봐야 하는지 적어 두었습니다.

내는 도구
chrome
JavaScript
15

브라우저와 node의 오류는 대개 무엇이 잘못되었는지만 알려 주고 왜 그 값이 그렇게 되었는지는 알려 주지 않아서 — undefined를 읽었다, 함수가 아니었다, JSON이 아니었다 — 고칠 자리는 터진 줄이 아니라 그 값을 만든 위쪽에 있고, ?.와 기본값으로 그 줄만 조용하게 만들면 같은 문제가 더 먼 곳에서 더 알아보기 어려운 꼴로 다시 나타납니다.

오류 문구를 읽는 법

  • 첫 줄부터 읽습니다. 아래로 갈수록 도구 내부 이야기이고, 정작 원인은 맨 위에 적혀 있습니다.
  • 파일 이름과 줄 번호가 있으면 거기가 시작점입니다 — 스택의 가장 위가 아니라, 내가 쓴 파일이 나오는 가장 위 줄입니다.
  • 문구를 그대로 검색합니다. 다만 내 경로와 변수 이름은 지웁니다 — 그 부분이 검색을 방해합니다.
  • 같은 문구가 도구 판마다 다르게 나옵니다. 검색 결과가 안 맞으면 판 번호를 함께 넣어 봅니다.
  • 고치는 명령을 붙여 넣기 전에 그 명령이 무엇을 버리는지 확인합니다. 되돌릴 수 없는 것이 섞여 있습니다.

자주 묻는 질문

Q. SyntaxError: Unexpected end of JSON input 는 무슨 뜻인가요?

JSON을 읽다가 문서가 끝나 버렸다는 뜻이고, 거의 언제나 몸통이 아예 비어 있었던 것입니다. 204 No Content나 본문 없는 오류 응답에 res.json()을 부른 경우, 응답 본문을 이미 한 번 읽어 두 번째에는 빈 것이 온 경우, 또는 쓰다 말고 끊긴 파일을 읽은 경우입니다. 먼저 텍스트로 받아서 비었는지 보고 나서 파싱하면 정확한 진단이 됩니다 — const t = await res.text(); if (!t) return null;. JSON.parse(text || 'null')처럼 기본값으로 덮는 것은 빈 응답을 정상으로 만들어 버리니, 서버가 왜 빈 몸통을 보냈는지 먼저 확인하세요.

Q. 어떻게 고치나요?

한 줄 명령으로 끝나지 않습니다. 위 설명에서 무엇을 봐야 하는지 적어 두었습니다.

Q. 어느 도구가 내는 오류인가요?

chrome입니다. JavaScript 갈래에 있고, 문구는 6낱말입니다.

같이 나는 오류