Unexpected end of JSON input: JSON skončil předčasně

Unexpected end of JSON input hlásí V8 v Node.js a Chromu, když vstup skončí dřív, než parser dočetl hodnotu. Nejčastěji jde o prázdný řetězec: prázdné tělo odpovědi, HTTP 204 nebo soubor, který se nenačetl. Když dokument skončí uprostřed pole nebo řetězce, nové verze V8 hlásí konkrétněji Expected ',' or ']' after array element nebo Unterminated string.

Autor: Aktualizováno

Znění hlášky v jednotlivých prostředích

Parser Hláška Kdy
Node.js 25, Chrome 153 (V8) JSON.parse, response.json(), Edge a další prohlížeče s V8 Unexpected end of JSON input Prázdný vstup (prázdné tělo odpovědi, HTTP 204)
Expected ',' or ']' after array element in JSON at position 13 (line 1 column 14) Zkrácený dokument: chybí konec pole a objektu
Unterminated string in JSON at position 12 (line 1 column 13) Neukončený řetězec
Firefox 158 JSON.parse, response.json() JSON.parse: unexpected end of data at line 1 column 1 of the JSON data Prázdný vstup (prázdné tělo odpovědi, HTTP 204)
JSON.parse: end of data when ',' or ']' was expected at line 1 column 14 of the JSON data Zkrácený dokument: chybí konec pole a objektu
JSON.parse: unterminated string at line 1 column 13 of the JSON data Neukončený řetězec
Safari (WebKit 26) JSON.parse, response.json() JSON Parse error: Unexpected EOF Prázdný vstup (prázdné tělo odpovědi, HTTP 204)
JSON Parse error: Expected ']' Zkrácený dokument: chybí konec pole a objektu
JSON Parse error: Unterminated string Neukončený řetězec
Python 3.14 json.loads, json.load (json.JSONDecodeError) Expecting value: line 1 column 1 (char 0) Prázdný vstup (prázdné tělo odpovědi, HTTP 204)
Expecting ',' delimiter: line 1 column 14 (char 13) Zkrácený dokument: chybí konec pole a objektu
Unterminated string starting at: line 1 column 10 (char 9) Neukončený řetězec
.NET 10 (System.Text.Json) JsonDocument.Parse, JsonSerializer.Deserialize The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Prázdný vstup (prázdné tělo odpovědi, HTTP 204)
'2' is an invalid end of a number. Expected a delimiter. Zkrácený dokument: chybí konec pole a objektu
Expected end of string, but instead reached end of data. Neukončený řetězec
PHP 8.4 json_last_error_msg(), JsonException s JSON_THROW_ON_ERROR Syntax error Prázdný vstup (prázdné tělo odpovědi, HTTP 204), Zkrácený dokument: chybí konec pole a objektu
Control character error, possibly incorrectly encoded Neukončený řetězec

Python hlásí prázdný vstup jako Expecting value: line 1 column 1 (char 0), stejně jako HTML místo JSON. Rozliš to podle toho, co vstup obsahuje (viz Unexpected token).

Příčiny a opravy

Prázdný vstup (prázdné tělo odpovědi, HTTP 204)

Chybně: prázdný vstup
Opraveno
{"knihy":[]}

Prázdný řetězec není JSON text. HTTP 204 nemá tělo a response.json() na něm skončí touto chybou. Prázdnou odpověď ošetři před parserem:

JavaScript: prázdná odpověď jako null
async function readJson(url) {
  const response = await fetch(url);
  const text = await response.text();
  // HTTP 204 a prázdné tělo: response.json() by skončilo "Unexpected end of JSON input".
  return text === '' ? null : JSON.parse(text);
}

Zkrácený dokument: chybí konec pole a objektu

Chybně
{"knihy":[1,2
Opraveno
{"knihy":[1,2]}

Data skončila uprostřed. Ověř, že jsi načetl celé tělo odpovědi nebo souboru: přerušený přenos, limit velikosti, čtení jen prvního bloku streamu. Nepřidávej závorky automaticky, chybět může i část dat.

Neukončený řetězec

Chybně
{"jmeno":"Ev
Opraveno
{"jmeno":"Eva"}

Chybí uzavírací uvozovka. PHP hlásí v tomto případě Control character error, possibly incorrectly encoded, i když vstup žádný řídicí znak neobsahuje.

Jak najít příčinu

Vypiš délku a konec přijatého textu. Pokud je délka 0, problém je v načtení nebo v odpovědi serveru, ne v JSON. Pokud text končí uprostřed, porovnej délku s hlavičkou Content-Length nebo s velikostí souboru.

Přesné znění, pozice a délka hlášky závisí na parseru a verzi. Pozice obvykle označuje místo, kde parser problém odhalil, ne vždy začátek příčiny.