Znění hlášky v jednotlivých prostředích
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)
{"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:
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
{"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
{"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.