본문으로 건너뛰기
jsonbeautifiers
한국어
V8 Node v24.15.0, V8 13.6.233.17에서 파서를 실행해 확인했습니다.

Unexpected end of JSON input

파서가 아직 더 있을 거라 기대하는 중에 입력의 끝에 도달했습니다. 문자열이 처음부터 비어 있었거나, 값이 열린 채로 문서가 잘렸거나 둘 중 하나입니다. 이 메시지에는 위치가 없다는 점에 주목하세요. 위치가 있는 오류들과 구별되는 지점이 바로 그것입니다.

JSON을 붙여넣고 어디서 깨지는지 정확히 확인하기

입력

붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기

실제 원인

어느 쪽이 답인 경우가 많은지, 그 순서대로 정리했습니다.

  1. 01 문자열이 비어 있음

    JSON.parse("")는 곧바로 이 오류를 냅니다. 빈 문자열은 유효한 JSON이 아닙니다. 보통 HTTP 204, 본문 없는 응답, 또는 빈 문자열로 기록된 localStorage 키에서 옵니다.

    깨지는 예

    JSON.parse(localStorage.getItem('draft'))

    되는 예

    const raw = localStorage.getItem('draft');
    const draft = raw ? JSON.parse(raw) : null;
  2. 02 응답 본문을 이미 소비함

    Response의 본문은 한 번만 읽을 수 있습니다. 같은 응답에 res.text()를 부른 뒤 res.json()을 부르면 두 번째에는 빈 문자열이 옵니다.

    깨지는 예

    const text = await res.text();
    const data = await res.json();   // body already used

    되는 예

    const text = await res.text();
    const data = text ? JSON.parse(text) : null;
  3. 03 문서가 잘림

    끊긴 연결, 본문 크기 제한(Express 기본값은 100kB), 일찍 끝난 스트림 읽기, 또는 읽는 중에 쓰이고 있던 파일. 입력이 객체 중간에서 끝났다면, 저희 검증기가 열린 채로 남은 괄호를 모두 짚고 각각이 어디서 시작했는지 알려 줍니다.

    깨지는 예

    {"users": [{"id": 1}, {"id":

    되는 예

    {"users": [{"id": 1}, {"id": 2}]}
  4. 04 npm이나 yarn 캐시가 깨짐

    이 문자열로 하는 검색의 상당수는 애플리케이션 코드가 아니라 npm에 관한 것입니다. 반쯤 쓰이다 만 캐시 파일은 설치 중에 같은 오류를 냅니다. npm cache clean --force를 실행하고 node_modules와 package-lock.json을 지운 뒤 다시 설치하세요.

  5. 05 아무것도 돌려주지 않는 함수의 결과를 파싱함

    JSON.parse(undefined)는 다른 메시지("undefined" is not valid JSON)를 내지만, undefined 대신 빈 문자열을 돌려주는 함수라면 여기로 옵니다.

다른 런타임에서의 같은 실수

밑바탕의 문제는 똑같고, 다른 건 문구뿐입니다. 동료가 이 중 하나를 들고 왔다면, 그 사람이 보고 있는 건 여러분이 보는 것과 같습니다.

Python Expecting value: line 1 column 1 (char 0)
Python, truncated object Expecting ',' delimiter: line 1 column 28 (char 27)

자주 묻는 질문

이 메시지에는 왜 행과 열이 없나요?
가리킬 위치 자체가 없기 때문입니다. 실패의 내용이 "입력이 끝나 버렸다"는 것이라, 문제의 자리는 문서의 끝입니다. 저희 검증기는 이를 입력의 끝으로 보고하고 아직 열려 있던 괄호를 나열합니다.
JSON.parse(null)도 이 오류를 내나요?
아닙니다. JSON.parse(null)은 null을 문자열 "null"로 바꾼 뒤 null을 돌려줍니다. 많은 사람이 의외라고 여기는 동작입니다. 오류를 내는 건 빈 문자열 쪽입니다.

지금 고치기

위의 도구에 페이로드를 붙여넣거나, 이 일을 위해 만들어진 도구로 바로 가세요.

닫히지 않은 괄호 찾기