Home·Error messages

chrome · JavaScript

The message

SyntaxError: Unexpected end of JSON input

What it means

The parser reached the end of the document while still reading JSON, and almost always the body was simply empty. Calling res.json() on a 204 No Content or on an error response with no body, reading a response body twice so the second read comes back empty, or reading a file that was truncated mid-write. Take the text first and check it before parsing — const t = await res.text(); if (!t) return null; — which gives you an exact diagnosis. Papering over it with JSON.parse(text || 'null') makes an empty response look normal, so find out why the server sent an empty body first.

The fix

There is no one-line command for this. The explanation says what to look at instead.

Printed by
chrome
JavaScript
15

Browser and Node errors usually tell you what broke and not why the value became what it was — you read undefined, it was not a function, it was not JSON — so the place to fix is upstream of the line that threw, and silencing just that line with ?. and default values makes the same problem reappear further away in a form that is harder to recognise.

Reading an error message

  • Read from the first line down. The lower you go the more it is about the tool’s internals; the cause is usually at the top.
  • If there is a file and a line number, start there — not the top stack frame, but the topmost line that names a file you wrote.
  • Search the message verbatim, but strip your own paths and variable names first; those are what stop the search from matching.
  • The same condition is worded differently across tool versions. If results look wrong, add the version number to the query.
  • Before pasting a fix, check what it throws away. Some of these cannot be undone.

Common questions

Q. What does “SyntaxError: Unexpected end of JSON input” mean?

The parser reached the end of the document while still reading JSON, and almost always the body was simply empty. Calling res.json() on a 204 No Content or on an error response with no body, reading a response body twice so the second read comes back empty, or reading a file that was truncated mid-write. Take the text first and check it before parsing — const t = await res.text(); if (!t) return null; — which gives you an exact diagnosis. Papering over it with JSON.parse(text || 'null') makes an empty response look normal, so find out why the server sent an empty body first.

Q. How do I fix it?

There is no one-line command. The explanation above says what to look at instead.

Q. Which tool prints this?

chrome. It sits under JavaScript, and the message runs to 6 words.

Errors nearby