
JSON.parse’de “Beklenmeyen belirteç” hatasını giderme: tüm nedenlere ilişkin pratik kılavuz
Yayın Tarihi 23 Tem 2026
SyntaxError: Unexpected token X in JSON at position N, JavaScript’te en sık karşılaşılan hatalardan biridir ve en az yardımcı olanlardan biridir — size ayrıştırıcının neden değil, nerede pes ettiğini gösterir. İşte bunu gerçekten düzeltmenin yolu.
Adım 1: Konum numarasını okuyun
JSON.parse, dizgenin başından itibaren 0’dan başlayarak karakterleri sayar. JSON’unuz bir değişkenden geliyorsa, başka bir şey yapmadan önce o konumun etrafındaki tam dilimi günlüğe kaydedin:
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));
}
}
Bu küçük kod parçacığı, JSON sözdizimi ile ilgili herhangi bir tavsiyeden daha fazla hatayı çözer; çünkü çoğu “beklenmeyen belirteç” hatası aslında “Dizgimin gerçekte ne içerdiğini bilmiyorum” hatalarıdır — kopyala-yapıştırdan kaynaklanan sondaki boşluklar, şablon sabitinden gelen fazladan bir satır sonu veya en başında (konum 0, çoğu düzenleyicide görünmeyen belirteci) bulunan bir bayt sırası işareti (BOM).
Gerçekte ne sıklıkla meydana geldiklerine göre sıralanmış 7 neden
- Sonunda virgül olması.
{"a": 1, "b": 2,}— JS nesne sabitlerinde geçerlidir, JSON’da geçersizdir.}veya]önündeki virgül, en yaygın tek nedendir. - Çift tırnak yerine tek tırnak.
{'a': 1}JS’dir, JSON değildir. JSON’da hem anahtarların hem de dize değerlerinin çift tırnak içine alınması gerekir; istisna yoktur. - Tırnak içine alınmamış anahtarlar.
{a: 1}— yine, JS’de geçerli, JSON’da geçersizdir. Her anahtarın tırnak içinde olması gerekir. - Geçerli bir JSON olmayan bir JS değeri.
undefined,NaN, bir işlev veya bir yorum (// like this) — bunların hiçbiri JSON spesifikasyonunda yer almaz, yalnızca JavaScript’te bulunur. - Çift kodlama.
JSON.stringify()işlevini iki kez çağırdınız ya da zaten bir nesne olan bir dizgiyi ayrıştırıyorsunuz —.parse()işlevini çağırmadan öncetypeof raw === 'string'ile kontrol edin. - Boş bir dize veya
undefinedyanıtı. Bir getirme işlemi sessizce başarısız olduysa veya boş bir gövde döndürdüyse,JSON.parse("")farklı ancak ilgili bir hata olanUnexpected end of JSON input’i atar — ayrıştırmadan önceresponse.ok’i kontrol edin ve ham gövdeyi günlüğe kaydedin. - Kopyalayıp yapıştırma işleminden kaynaklanan BOM veya görünmez karakterler. PDF, Word belgesi veya bazı terminal çıktılarından JSON yapıştırmak, normal bir karakterle aynı görünen bir BOM veya ayrılmaz boşluk içerebilir.
En hızlı çözüm: hata ayıklamadan önce doğrulama yapın
Ham hata mesajlarını karakter karakter okumak zaman alır. Tam dizeyi, konum numarasından tahmin etmek yerine geçersiz karakteri doğrudan vurgulayan bir biçimlendiriciye yapıştırın — bu, “812. karakter civarında” ifadesini “tam burada, eksik olan bu parantez” haline getirir. (Aşağıda bağlantısı verilmiştir.)
JSON gerçekten geçerli olmasına rağmen hata veriyorsa
Bir biçimlendirici, JSON’unuzun sözdizimsel olarak doğru olduğunu onaylasa da JSON.parse hala hata veriyorsa, aktardığınız dize sandığınız dize değildir. En yaygın neden: .parse() işlevini, çözümlenmiş gövdesi yerine bir Response nesnesi üzerinde çağırıyorsunuz.
// 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);
Hızlı başvuru
| Belirti | Olası neden |
|---|---|
Unexpected token } |
Kapanış parantezinden önce son virgül |
Unexpected token ' |
Çift tırnak yerine tek tırnak kullanılması |
Unexpected token a (veya herhangi bir harf) |
Tırnak içine alınmamış nesne anahtarı |
Unexpected end of JSON input |
Boş dize, kesik yanıt veya kapanmamış köşeli parantez |
Unexpected token (konum 0) |
Kopyala-yapıştır veya Windows’ta kaydedilmiş bir dosyadan gelen bayt sırası işareti |
Bunların hiçbiri ezberleme gerektirmez — düzeltme her zaman aynı üç adımdan oluşur: bildirilen konumun etrafındaki dilimi günlüğe kaydedin, bir biçimlendiriciye geçirin, işaretlediği tek karakteri düzeltin.