JSON verilerini uygulamalarınızda işlerken en sık karşılaşılan hatalardan biri olan ‘Beklenmeyen token’ hatası, çoğu zaman JSON formatındaki bir sorundan değil, yanıtın beklenmedik bir şekilde HTML olması ya da verinin gereksiz yere iki kez parse edilmesinden kaynaklanıyor. Bu durumda, sorunu JSON’un kendisinde aramak yerine, yanıtı üreten kaynağa odaklanmak gerekiyor.
Pek çok geliştirici, JSON.parse() fonksiyonunu çalıştırdığında veya API’lerden gelen yanıtı işlerken bu hata mesajıyla karşılaşabiliyor. Oysa ki bu hatanın altında yatan gerçek nedenler oldukça basit ve doğrudan ilgili olabiliyor. Gelin, bu yaygın JSON hatalarının arkasındaki gerçekleri ve nasıl çözülebileceklerini birlikte inceleyelim.
Yanıt HTML olabilir: ‘<’ token’ı uyarı işareti
‘Beklenmeyen token <’ hatasıyla karşılaştığınızda, büyük olasılıkla yanıt olarak HTML alıyorsunuz. Bu durumda, JSON yerine bir HTML sayfası (404 hatası, oturum yenileme sayfası, Cloudflare doğrulama sayfası vb.) döndürülmüş demektir. Bu sorun, genellikle API endpoint’inin yanlış yazılması, yetkilendirme eksikliği ya da token’ın süresinin dolmuş olmasından kaynaklanır.
Örneğin, bir API çağrısında bulunurken:
const yanıt = await fetch(apiUrl);
const metin = await yanıt.text();
console.log(metin.substring(0, 200));
// <!DOCTYPE html>
// <html>
// <head><title>404 - Sayfa bulunamadı</title></head>Bu çıktı, yanıtın HTML olduğunu açıkça gösteriyor. Dolayısıyla, sorunu JSON parse işleminde aramak yerine, API endpoint’inin doğruluğunu, kimlik doğrulama token’larının geçerliliğini ve sunucunun durumunu kontrol etmek gerekiyor.
Veri iki kez parse edildiğinde ortaya çıkan ‘o’ hatası
‘Beklenmeyen token o at position 1’ hatası, genellikle yanıtın zaten parse edilmiş bir JSON nesnesi olarak geri döndürüldüğü ve ardından ikinci bir parse işlemine tabi tutulduğu durumlarda ortaya çıkar. Örneğin, fetch().then(r => r.json()) kullanırken, r.json() fonksiyonu otomatik olarak yanıtı parse ettiği için, ardından başka bir parse işlemi uygulamak gereksizdir ve hata oluşturur.
Bu durumu önlemek için, yanıtı bir kez parse etmek yeterlidir. Eğer res.text() kullanıyorsanız ve ardından JSON.parse() uyguluyorsanız, bu ikinci parse işlemi gereksizdir ve hatalara yol açabilir. Doğru yaklaşım, yanıtı doğrudan JSON olarak almak veya sadece bir kez parse işlemi uygulamaktır.
Aslında bozuk olan JSON verileri: en yaygın hatalar
JSON verilerinin gerçekten bozuk olduğu durumlar nadirdir, ancak karşılaşılan en yaygın hatalar şunlardır:
- Trailing comma (sonda virgül): Örneğin,
{"anahtar": "değer",}şeklindeki bir JSON nesnesi geçersizdir. - Tek tırnak kullanımı: JSON, yalnızca çift tırnak (
") kullanır. Tek tırnaklar (') geçersizdir. - Anahtarların tırnak içerisinde olmaması: Örneğin,
{anahtar: "değer"}geçersizdir;{ "anahtar": "değer" }doğru formattır. - JSON dışındaki değerler: Python’daki
True,False,Nonegibi değerler JSON’da geçerli değildir. Bunların yerinetrue,false,nullkullanılmalıdır. - Yorum satırları: JSON, yorum satırlarını desteklemez. Eğer JSON verisinde
// yorumgibi satırlar varsa, bunlar geçersizdir. - Kesintiye uğramış kopyala-yapıştır: JSON verisinin tamamı kopyalanmamışsa, örneğin
{ "anahtar": "değerşeklinde kesintiye uğramış bir JSON nesnesi, parse hatasına yol açar.
Bu tür hataların çözümü için, JSON doğrulayıcıları kullanmak ve veriyi düzgün bir şekilde formatlamak gerekiyor.
JSON hatalarını hızlıca düzeltmek için pratik yöntemler
JSON hatalarını çözmek için birkaç basit adım izleyebilirsiniz:
- Doğrulama aracı kullanın: JSON verisini doğrulamak için çevrimiçi araçlardan faydalanabilirsiniz. Örneğin, JSON verisinin hangi satırında hata olduğunu bulmak için doğrulayıcılar kullanabilirsiniz.
- JSON5.parse() fonksiyonunu kullanın: JSON5, JSON’un daha esnek bir versiyonudur ve bazı yaygın hataları otomatik olarak düzeltir. Örneğin, trailing comma ve tek tırnak gibi hataları düzeltebilir.
- JSON onarım araçları kullanın: Eğer JSON verisinde hafif hatalar varsa ve bunları manuel olarak düzeltmek yerine otomatik olarak çözmek istiyorsanız, JSON onarım araçları kullanabilirsiniz. Bu araçlar, JSON verisini sıkı JSON formatına dönüştürürken, bazı hataları otomatik olarak düzeltir.
Örneğin, tarayıcıda hızlı bir şekilde JSON verisini onarmak için:
// JSON5 ile parse etme
const düzeltilmişVeri = JSON5.parse(bozukJSON);
// Veya çevrimiçi bir araç kullanarak10 saniyelik hata ayıklama kılavuzu
JSON hatalarıyla karşılaştığınızda, aşağıdaki basit adımları izleyerek sorunun kaynağını hızlıca tespit edebilirsiniz:
- ‘<’ token’ı görülüyorsa: Yanıtın HTML olduğunu anlayın ve API endpoint’inin doğruluğunu, kimlik doğrulama token’larını ve sunucu durumunu kontrol edin.
- ‘o at position 1’ hatası görülüyorsa: Yanıtın iki kez parse edildiğini anlayın ve parse işlemini yalnızca bir kez uygulayın.
- Diğer hatalarda: JSON verisinin bozuk olduğunu anlayın ve doğrulama ile onarım araçlarını kullanarak sorunu çözün.
Bu basit adımlar, JSON hatalarını hızlıca tanımlamanıza ve çözmenize yardımcı olacaktır. Unutmayın, JSON hatalarının çoğu, yanıtın beklenmedik şekilde HTML olması ya da verinin yanlış parse edilmesi gibi basit nedenlerden kaynaklanır. Bu nedenle, sorunu doğrudan JSON formatında aramak yerine, yanıtı üreten kaynağa odaklanmak her zaman daha verimli olacaktır.
Geliştirme sürecinde karşılaşılan JSON hataları, aslında sıkıntı değil, geliştiricilerin karşılaşması gereken doğal süreçlerdir. Bu hatalardan öğrenmek ve çözüm yollarını keşfetmek, daha sağlam uygulamalar geliştirmenin temel adımlarından biridir.
Yapay zeka özeti
JSON parse ederken 'Beklenmeyen token' hatasıyla mı karşılaşıyorsunuz? Genellikle sorun JSON değil, yanıtın HTML olması ya da verinin iki kez parse edilmesidir. Hataların nedenlerini ve çözümlerini öğrenin.