CodeKitHub
Popravite "Unexpected token" u JSON.parse: terenski vodič kroz svaki uzrok

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

  1. 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.
  2. Jednostruki navodnici umjesto dvostrukih. {'a': 1} je JS, ne JSON. JSON zahtijeva dvostruke navodnike i oko ključeva i oko string vrijednosti, bez iznimke.
  3. Ključevi bez navodnika. {a: 1} — opet, ispravan JS, neispravan JSON. Svaki ključ treba navodnike.
  4. 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.
  5. Dvostruko kodiranje. Pozvali ste JSON.stringify() dvaput, ili parsirate string koji je već objekt — provjerite s typeof raw === 'string' prije poziva .parse().
  6. Prazan string ili undefined odgovor. Ako je fetch tiho pao ili vratio prazno tijelo, JSON.parse("") baca Unexpected end of JSON input, drugačiju ali srodnu grešku — provjerite response.ok i ispišite sirovo tijelo prije parsiranja.
  7. 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.

← Natrag na blog