
Popravite "Unexpected token" u JSON.parse: terenski vodič kroz svaki uzrok
Objavljeno 23. srp 2026.
SyntaxError: Unexpected token X in JSON at position N jedna je od najčešćih grešaka u JavaScriptu, i jedna od najmanje korisnih — govori vam gdje je parser odustao, a ne zašto. Evo kako je stvarno popraviti.
Korak 1: pročitajte broj pozicije
JSON.parse broji znakove od početka stringa, počevši od 0. Ako je vaš JSON došao iz varijable, prije bilo čega drugog ispišite točan isječak oko te pozicije:
try {
JSON.parse(raw);
} catch (e) {
const match = e.message.match(/position (\d+)/);
if (match) {
const pos = Number(match[1]);
console.log(raw.slice(Math.max(0, pos - 20), pos + 20));
}
}
Taj jedan isječak koda rješava više ovih grešaka nego bilo koji savjet o JSON sintaksi, jer većina “unexpected token” grešaka zapravo su greške tipa “ne znam što moj string stvarno sadrži” — zaostali razmak od copy-pastea, dodatni novi red iz template literala ili byte-order-mark (BOM) na samom početku (pozicija 0, token , koji je u većini editora nevidljiv).
7 uzroka, poredanih prema tome koliko se često stvarno događaju
- Zarez na kraju.
{"a": 1, "b": 2,}— ispravno u JS objektnim literalima, neispravno u JSON-u. Zarez prije}ili]daleko je najčešći uzrok. - Jednostruki navodnici umjesto dvostrukih.
{'a': 1}je JS, ne JSON. JSON zahtijeva dvostruke navodnike i oko ključeva i oko string vrijednosti, bez iznimke. - Ključevi bez navodnika.
{a: 1}— opet, ispravan JS, neispravan JSON. Svaki ključ treba navodnike. - JS vrijednost koja nije valjani JSON.
undefined,NaN, funkcija ili komentar (// like this) — ništa od toga ne postoji u JSON specifikaciji, samo u JavaScriptu. - Dvostruko kodiranje. Pozvali ste
JSON.stringify()dvaput, ili parsirate string koji je već objekt — provjerite stypeof raw === 'string'prije poziva.parse(). - Prazan string ili
undefinedodgovor. Ako je fetch tiho pao ili vratio prazno tijelo,JSON.parse("")bacaUnexpected end of JSON input, drugačiju ali srodnu grešku — provjeriteresponse.oki ispišite sirovo tijelo prije parsiranja. - BOM ili nevidljivi znakovi iz copy-pastea. Lijepljenje JSON-a iz PDF-a, Word dokumenta ili nekog terminalskog ispisa može ponijeti BOM ili neprekidajući razmak koji izgleda identično običnom znaku.
Najbrži popravak: validirajte prije debugiranja
Čitanje sirovih poruka o greškama znak po znak je sporo. Zalijepite točan string u formater koji izravno označi neispravan znak umjesto da pogađate iz broja pozicije — pretvara “negdje oko znaka 812” u “ova konkretna zagrada koja nedostaje, točno ovdje.” (Poveznica u nastavku.)
Kad je JSON stvarno valjan, a i dalje ne prolazi
Ako formater potvrdi da je vaš JSON sintaktički ispravan, a JSON.parse i dalje baca grešku, string koji prosljeđujete nije string koji mislite da jest. Najčešći razlog: pozivate .parse() na Response objektu umjesto na njegovom razriješenom tijelu.
// Wrong — parses "[object Response]", not the body
const data = JSON.parse(await fetch(url));
// Right
const data = await (await fetch(url)).json();
// or, if you need the raw text first:
const text = await (await fetch(url)).text();
const data = JSON.parse(text);
Brzi podsjetnik
| Simptom | Vjerojatan uzrok |
|---|---|
Unexpected token } |
Zarez na kraju, prije zatvarajuće vitičaste zagrade |
Unexpected token ' |
Korišteni jednostruki umjesto dvostrukih navodnika |
Unexpected token a (ili bilo koje slovo) |
Ključ objekta bez navodnika |
Unexpected end of JSON input |
Prazan string, odsječen odgovor ili nezatvorena zagrada |
Unexpected token (pozicija 0) |
Byte-order-mark iz kopiranog ili u Windowsu spremljenog dokumenta |
Ništa od ovoga ne zahtijeva pamćenje — popravak su uvijek ista tri koraka: ispišite isječak oko prijavljene pozicije, provucite ga kroz formater i popravite jedan znak koji označi.