JSON 오류, 설명
여기의 각 페이지는 정확한 오류 메시지 하나를 놓고 세 가지 질문에 답합니다. 파서가 실제로 무엇에 불평한 것인지, 실제 코드에서 그것을 일으키는 원인이 무엇인지(빈도순), 그리고 무엇을 바꿔야 하는지. 각 페이지에 검증기를 넣어 두었으므로 페이지를 떠나지 않고 페이로드를 고칠 수 있습니다.
메시지는 기억이 아니라 실측입니다. 이 사이트의 V8과 파이썬 문자열은 전부 파서를 실제로 돌려 얻었습니다. 파이어폭스와 사파리 문자열은 의도적으로 빠져 있습니다. 실행해 검증할 수 없었기 때문이고, 정확성을 통째로 논거로 삼는 사이트가 오류 메시지에 대한 추측을 공개하는 것은 나쁜 거래이기 때문입니다.
아니면 그냥 페이로드를 붙여 넣으세요
붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기
JavaScript, Node, 크롬
Node v24.15.0(V8 13.6.233.17)에서 실측. V8은 2022년에 이 메시지들을 거의 전부 다시 썼기 때문에, 각 페이지에는 현행 문구와 오래된 답변에서 보게 될 문구가 함께 실려 있습니다.
-
Unexpected token '<', "<!DOCTYPE "... is not valid JSON서버가 오류 페이지를 돌려줌 , 그리고 다른 원인 4가지. -
Unexpected end of JSON input문자열이 비어 있음 , 그리고 다른 원인 4가지. -
"[object Object]" is not valid JSON그 값은 이미 파싱되어 있었음 , 그리고 다른 원인 2가지. -
"undefined" is not valid JSON한 번도 설정된 적 없는 스토리지 키 , 그리고 다른 원인 2가지. -
Unexpected non-whitespace character after JSON at position N (line L column C)입력이 NDJSON이나 JSON Lines , 그리고 다른 원인 3가지. -
Bad control character in string literal in JSON at position N (line L column C)여러 줄 텍스트를 문자열에 그대로 붙여 넣음 , 그리고 다른 원인 3가지. -
Bad escaped character in JSON at position N (line L column C)백슬래시가 하나뿐인 윈도우 파일 경로 , 그리고 다른 원인 3가지. -
Expected double-quoted property name in JSON at position N (line L column C)닫는 중괄호 앞의 끝쉼표 , 그리고 다른 원인 2가지. -
Expected property name or '}' in JSON at position N (line L column C)str()로 출력한 파이썬 dict에서 온 작은따옴표 키 , 그리고 다른 원인 3가지. -
Expected ',' or '}' after property value in JSON at position N (line L column C)속성 사이의 쉼표 누락 , 그리고 다른 원인 3가지. -
Unterminated string in JSON at position N (line L column C)값 안의 이스케이프되지 않은 큰따옴표 , 그리고 다른 원인 3가지.
파이썬
CPython 3.14.3에서 실측. 이 중 둘은 파이썬 3.13에서 새로 생긴 메시지라 버전이 중요하고, 어느 것인지는 각 페이지에 적혀 있습니다.
-
Expecting value: line 1 column 1 (char 0)응답 본문이 JSON이 아니라 HTML , 그리고 다른 원인 3가지. -
Extra data: line L column C (char N)파일이 JSON Lines , 그리고 다른 원인 2가지. -
Expecting ',' delimiter: line L column C (char N)문자열 안의 이스케이프되지 않은 큰따옴표 , 그리고 다른 원인 3가지. -
Expecting property name enclosed in double quotes: line L column C (char N)직렬화가 아니라 출력된 파이썬 dict , 그리고 다른 원인 2가지. -
Invalid control character at: line L column C (char N)문자열 안의 여러 줄 텍스트 , 그리고 다른 원인 2가지. -
Invalid \escape: line L column C (char N)윈도우 경로 , 그리고 다른 원인 2가지. -
Unterminated string starting at: line L column C (char N)값 안의 이스케이프되지 않은 따옴표 , 그리고 다른 원인 2가지.
PHP
PHP는 기본값에서 조용히 실패하고, 그게 진짜 문제입니다. 실제로 메시지를 얻어 내는 방법을 해당 페이지가 다룹니다.
C#과 .NET
Newtonsoft.Json과 System.Text.Json은 같은 실패를 다른 말로 표현합니다.
자바
Jackson. JVM 생태계의 거의 모든 것이 아래에 깔고 쓰는 것입니다.
이 대부분의 뒤에 있는 네 가지 실수
문구를 걷어내면 이 페이지의 거의 모든 메시지는 네 가지 중 하나에서 옵니다.
- 애초에 JSON이 아니다
- HTML 오류 페이지, 빈 본문, 평문 메시지. 파서가 옳고 요청이 틀렸습니다. 본문을 확인하기 전에 상태 코드와 Content-Type을 확인하세요.
- JSON이 아니라 JavaScript나 파이썬이다
- 작은따옴표, 따옴표 없는 키, 끝 쉼표, True와 None. 거의 언제나 직렬화되지 않고 출력된 dict나 객체 리터럴입니다. 복구가 전부 고쳐 줍니다.
- 문자열 연결로 만들어졌다
- 값이 한 번도 이스케이프되지 않았다는 뜻이고, 그중 어딘가에 따옴표나 줄바꿈이 들어가면 문서가 깨집니다. 대신 직렬화하면 이 부류의 버그는 아예 생길 수 없습니다.
- 하나가 아니라 여러 문서다
- NDJSON을 값 하나로 읽은 것입니다. 줄 단위로 읽거나 레코드를 배열로 감싸세요.