CodeKitHub
Türkçe
JSON.parse’de “Beklenmeyen belirteç” hatasını giderme: tüm nedenlere ilişkin pratik kılavuz

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

  1. 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.
  2. Ç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.
  3. 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.
  4. 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.
  5. Ç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 önce typeof raw === 'string' ile kontrol edin.
  6. Boş bir dize veya undefined yanı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 olan Unexpected end of JSON input’i atar — ayrıştırmadan önce response.ok’i kontrol edin ve ham gövdeyi günlüğe kaydedin.
  7. 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.

← Blog'a Dön