JSON.parse() Hatası: "Unexpected token o" Nasıl Çözülür?

JSON.parse() hatası gördüğünde, özellikle "Unexpected token o in JSON at position 1", neredeyse kesin bir şey oluyor: zaten bir nesne olan bir değeri tekrar JSON'a çevrilmiş gibi davranıyorsun.

Sorun şu: JSON.parse() yalnızca metin (string) kabul eder. Eğer ona bir nesne gönderirsen, JavaScript ilk olarak onu "[object Object]" dizesine dönüştürür. Parser bu dizenin başındaki köşeli parantez `[` ile başladığını görür, sonra pozisyon 1'de `o` harfine çarpar ve çöker.

1const user = { name: "Ali" };
2JSON.parse(user); // SyntaxError: Unexpected token o

Çözüm çok basit: değer zaten bir nesne ise, onu doğrudan kullan. Parse etme.

1const user = { name: "Ali" };
2console.log(user.name); // "Ali"

En sık karşılaşılan üç sebep vardır. Birincisi `response.json()` kullanırken hata yapıyorsun. Fetch API'nin `response.json()` metodu zaten gövdeyi çözer ve bir nesne döndürür. İkinci kez parse etmeye çalışırsan hata alırsın.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1const res = await fetch("/api/user");
2const data = await res.json(); // zaten bir nesne
3console.log(data.name); // doğru

İkincisi Axios veya jQuery'nin otomatik çözme davranışı. Axios yanıtı `response.data` içinde sunar; jQuery ile `dataType: "json"` kullanırsan, kütüphane zaten çözülmüş nesneyi verir. Tekrar `JSON.parse()` çağırma.

Üçüncüsü ise API yanıtlarını iki kez işlemek. Bazı kütüphaneler veya middleware'ler otomatik çözüm yapabilir; sende de çözüm yapıyorsan çift işlem olur.

Kısacası: verinin nereden geldiğini, hangi aşamada çözüldüğünü takip et. Browser konsolunda `console.log(typeof data)` ile kontrol et, eğer `"object"` çıkarsa, parse etme.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz