CodeKitHub
Fiks "Unexpected token" i JSON.parse: en feltguide til alle årsakene

Fiks "Unexpected token" i JSON.parse: en feltguide til alle årsakene

Publisert 23. juli 2026

SyntaxError: Unexpected token X in JSON at position N er en av de vanligste feilene i JavaScript, og en av de minst nyttige — den forteller deg hvor parseren ga opp, ikke hvorfor. Her er hvordan du faktisk fikser den.

Steg 1: les posisjonstallet

JSON.parse teller tegn fra starten av strengen, med start på 0. Hvis JSON-en din kom fra en variabel, logg det nøyaktige utsnittet rundt den posisjonen før du gjør noe annet:

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));
  }
}

Den ene kodesnutten løser flere av disse feilene enn noe råd om JSON-syntaks, fordi de fleste «unexpected token»-feil egentlig er «jeg vet ikke hva strengen min faktisk inneholder»-feil — mellomrom på slutten fra en kopier-og-lim, et ekstra linjeskift fra en template literal, eller et byte-order-mark (BOM) helt i starten (posisjon 0, token , som er usynlig i de fleste editorer).

De 7 årsakene, rangert etter hvor ofte de faktisk skjer

  1. Komma på slutten. {"a": 1, "b": 2,} — gyldig i JS-objektliteraler, ugyldig i JSON. Kommaet før } eller ] er den aller vanligste årsaken.
  2. Enkle anførselstegn i stedet for doble. {'a': 1} er JS, ikke JSON. JSON krever doble anførselstegn rundt både nøkler og strengverdier, uten unntak.
  3. Nøkler uten anførselstegn. {a: 1} — igjen, gyldig JS, ugyldig JSON. Hver nøkkel trenger anførselstegn.
  4. En JS-verdi som ikke er gyldig JSON. undefined, NaN, en funksjon, eller en kommentar (// like this) — ingen av disse finnes i JSON-spesifikasjonen, bare i JavaScript.
  5. Dobbel koding. Du kalte JSON.stringify() to ganger, eller du parser en streng som allerede er et objekt — sjekk med typeof raw === 'string' før du kaller .parse().
  6. En tom streng eller undefined-respons. Hvis et fetch-kall feilet stille eller returnerte en tom body, kaster JSON.parse("") Unexpected end of JSON input, en annen, men beslektet feil — sjekk response.ok og logg den rå body-en før du parser.
  7. BOM eller usynlige tegn fra kopier-og-lim. Å lime inn JSON fra en PDF, et Word-dokument eller terminalutskrift kan dra med seg et BOM eller et hardt mellomrom som ser identisk ut med et vanlig tegn.

Den raskeste fiksen: valider før du feilsøker

Å lese rå feilmeldinger tegn for tegn er tregt. Lim den nøyaktige strengen inn i en formatterer som fremhever det ugyldige tegnet direkte i stedet for å gjette ut fra et posisjonstall — det gjør «et sted rundt tegn 812» om til «akkurat denne manglende klammen, her.» (Lenket nedenfor.)

Når JSON-en faktisk er gyldig, men likevel feiler

Hvis en formatterer bekrefter at JSON-en din er syntaktisk korrekt og JSON.parse fortsatt kaster feil, er strengen du sender inn ikke den strengen du tror den er. Den vanligste grunnen: du kaller .parse() på et Response-objekt i stedet for dets ferdiglastede body.

// 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);

Hurtigreferanse

Symptom Sannsynlig årsak
Unexpected token } Komma rett før den avsluttende klammen
Unexpected token ' Enkle anførselstegn brukt i stedet for doble
Unexpected token a (eller en annen bokstav) Objektnøkkel uten anførselstegn
Unexpected end of JSON input Tom streng, avkuttet respons, eller ulukket klamme
Unexpected token  (posisjon 0) Byte-order-mark fra en kopiert eller Windows-lagret fil

Ingenting av dette krever at du pugger noe — fiksen er alltid de samme tre stegene: logg utsnittet rundt den rapporterte posisjonen, kjør det gjennom en formatterer, fiks det ene tegnet den flagger.

← Tilbake til bloggen