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.
1const res = await fetch("/api/user");2const data = await res.json(); // zaten bir nesne3console.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.
0 yorum