API yanıtı, yapılandırma dosyası ya da Python çıktısıyla uğraşanlar için. Hata mesajını okumayı ve hatayı kaynağında düzeltmeyi anlatıyor.
Bir API yanıtını elle düzelttiniz, kaydettiniz ve uygulama açılmadı. Konsolda tek satır var: Unexpected token. Çoğu zaman suçlu tek bir karakterdir: son elemandan sonra unutulmuş bir virgül, tek tırnak ya da kapanmamış bir parantez.
Bu yazıda en sık görülen 10 JSON hatasını JSON Biçimlendirici'de tek tek denedik. Her biri için aracın ne dediğini, sebebini ve düzeltilmiş halini yazdık.
Kısaca
JSON neden bu kadar katı?
JSON'un kuralları kısa bir belgede yazar ve istisna tanımaz. Metin çift tırnakla yazılır, anahtar her zaman metindir, son elemandan sonra virgül gelmez, yorum satırı yoktur. JavaScript nesnesi bunların çoğuna izin verdiği için ikisi sık karıştırılır.
Katılık bir kusur değil. JSON'u Python, PHP, Go ya da bir mobil uygulama aynı şekilde okumak zorunda. Bir tarafın hoş gördüğü virgülü öbür taraf reddederse veri yolda kalır. Bir postanenin adres formatı gibi düşünün: sokağı nereye yazdığınız size göre fark etmez, ayırma makinesine göre eder.
Denedik: 10 bozuk JSON ve aldığımız mesajlar
Her örnek 3-8 satırlık, kurgusal bir kayıttı. Hepsini aracın varsayılan ayarıyla, yani Kaynak kutusu Ham (otomatik algıla) iken yapıştırdık. Mesajları olduğu gibi aktarıyoruz.
| Hata | Örnek | Araçta ne oldu | Düzeltme |
|---|---|---|---|
| Son elemandan sonra virgül | "sehir": "İzmir",} |
Virgülü sildi: "Sondaki fazladan virgül kaldırıldı, ilk görüldüğü satır: 5" | Son virgülü silin |
| Tek tırnaklı metin | "ad": 'Ayşe' |
Girdiyi Python sözlüğü saydı ve çevirdi: "Python dict yapısı tespit edildi." | Metni çift tırnağa alın |
| Tırnaksız anahtar | ad: "Ayşe" |
"Tırnaksız anahtarlar tırnaklandı, ilk görüldüğü satır: 2" | "ad": "Ayşe" |
| Yorum satırı | // not: test kaydı |
"Yorum satırı kaldırıldı, JSON yorum desteklemez, ilk görüldüğü satır: 2" | Yorumu silin ya da ayrı bir alana taşıyın |
| Kapanmamış süslü parantez | "adres": { "sehir": "İzmir" |
Durdu: "5. satır, 2. sütun: Virgül veya } bekleniyordu" ve altında ^ işareti. Çıktı üretmedi. | Eksik } karakterini ekleyin |
| Python sözlüğü | 'aktif': True, 'not': None |
"Dile özgü sabitler JSON karşılıklarına çevrildi (2 yerde)" | true, null |
| Başında sıfır ya da NaN | "kod": 0123, "oran": NaN |
"Başındaki sıfırlar kaldırıldı, JSON sekizlik sayı tanımaz" ve "Sonsuz veya tanımsız sayı JSON'da yok, null yazıldı" | "kod": "0123", null |
| Kaçışsız ters bölü | "C:\Users\ayse" |
Ters bölüleri çift yazdı: "JSON'da olmayan kaçış dizisi metin olarak korundu, ters bölü iki kez yazıldı (2 yerde), ilk görüldüğü satır: 2" | "C:\\Users\\ayse" |
| Aynı anahtar iki kez | "ad": "Ayşe", "ad": "Fatma" |
"Yinelenen anahtar bulundu, sonuncusu kaldı, ilk görüldüğü satır: 3" | Hangisi doğruysa onu bırakın |
| 2^53'ten büyük sayı | "siparis": 12345678901234567890 |
"1 sayı JavaScript hassasiyetini aşıyor, tam değerleri korundu." | Kimlikleri metin olarak gönderin |
İlk şaşırtıcı sonuç şu: araç çoğu hatada durmuyor, girdiyi onarıp neyi değiştirdiğini satır numarasıyla yazıyor. Kaynak kutusunda JSON seçtiğimizde de aynı onarımı yaptı, üstüne "Kaynak olarak JSON seçtiniz ama girdi ... olarak algılandı" notunu ekledi.
Durduğu tek yer kapanmamış parantezdi. Orada tahmin yürütmek veriyi bozabileceği için çıktı üretmedi ve hatanın yerini gösterdi.
Hata mesajındaki satır ve sütun, sorunun fark edildiği yeri gösterir. Eksik parantez 4. satırda unutulmuştu, araç 5. satırda fark etti. Aradığınız karakter çoğu zaman gösterilen yerin hemen öncesindedir.
{
"ad": "Ayşe",
"adres": {
"sehir": "İzmir"
}
Onarılmış çıktı işinizi kurtarır ama hatayı üreten yer hala oradadır. Bozuk JSON bir programdan geliyorsa, bir sonraki yanıt da aynı hatayla gelir. Düzeltmeyi kaynağa, yani JSON'u yazan koda ya da dosyaya uygulayın.
Python'dan kopyalanan veri: True, None ve tek tırnak
En sık karşılaştığımız durum bu. Python'da print(sozluk) çıktısı JSON'a benzer ama JSON değildir: tırnaklar tek, sabitler büyük harflidir. Araç bunu yapıştırdığınız anda tanıdı ve iki değişikliği ayrı ayrı yazdı.
{'ad': 'Ayşe Yılmaz', 'aktif': True, 'not': None, 'puan': 4.5}
{
"ad": "Ayşe Yılmaz",
"aktif": true,
"not": null,
"puan": 4.5
}
Kalıcı çözüm Python tarafında: sözlüğü yazdırmak yerine json.dumps(sozluk, ensure_ascii=False) kullanın. ensure_ascii=False olmadan "Ayşe" çıktıda Ay\u015fe olarak görünür; bu da geçerli JSON'dur ama okuması zordur.
Hata vermeyen ama sorun çıkaran durumlar
Aynı anahtarın iki kez yazılması. JSON şartnamesi anahtarların benzersiz olmasını önerir ama zorunlu tutmaz. Çoğu ayrıştırıcı hata vermez ve sonuncuyu alır. Denememizde "ad" önce "Ayşe", sonra "Fatma" idi; çıktıda yalnız "Fatma" kaldı. İki yapılandırma dosyası birleştirilince bu sık olur ve yanlış değerle çalıştığınızı fark etmezsiniz.
Çok büyük tam sayılar. JavaScript sayıları 9007199254740991 sınırına kadar tam sayıyı kesin tutar. 12345678901234567890 değerini tarayıcının kendi JSON.parse fonksiyonuyla okuduğumuzda sonuç 12345678901234567000 oldu; son dört hane hata vermeden değişti. Araç ise sayıyı olduğu gibi korudu ve uyarı yazdı. Sipariş, kart ya da kullanıcı kimliği gibi değerleri metin olarak göndermek en güvenli yol.
Başında sıfır olan sayılar da bu gruba yakındır. 0123 JSON'da geçersiz; araç onu 123 yaptı. Posta kodu 06100 ya da telefon numarası gibi değerler sayı değil metindir, tırnak içinde yazın.
Ters bölü de benzer bir tuzak kurar. JSON'da ters bölü bir kaçış dizisi başlatır. \t sekme, \n satır sonu demektir. "C:\Users\ayse" geçersizdir ve tarayıcı "Bad escaped character" hatası verir. Araç bu yolu onardı: ters bölüleri çift yazdı, değer C:\Users\ayse olarak kaldı ve bunu notta söyledi. "C:\temp\new" ise geçerli JSON'dur, bu yüzden hiçbir yerde hata vermez: yol, içinde bir sekme ve bir satır sonu olan metne dönüşür. Windows yolunda her ters bölüyü çift yazın.
JSON Biçimlendirici'de adım adım
- JSON Biçimlendirici sayfasını açın.
- JSON'u sol kutuya yapıştırın ya da Dosya aç ile bir dosya seçin.
- Üstte çıkan özeti okuyun: hangi yapıyı tanıdığını ve neyi değiştirdiğini satır numarasıyla yazar. Kırmızı kutu çıkarsa gösterilen satırın hemen öncesine bakın.
- Girinti kutusundan 2 ya da 4 boşluk seçin. Tek satır isteyen bir yere göndereceksiniz Küçült, tek satır seçeneğini kullanın.
- Derin bir yapıda alan arıyorsanız çıktının üstündeki Ağaç görünümüne geçin.
- Kopyala ya da İndir ile sonucu alın.
Aracın yapmadıkları
Araç yalnız söz dizimine bakar. Alanların doğru adla ve doğru türde gelip gelmediğini, yani bir şemaya uyup uymadığını denetlemez. "yas" alanına "yirmi dokuz" yazarsanız geçerli JSON olduğu için sorun görmez.
Kapanmamış parantez gibi yapısal hatalarda onarım denemez, yalnız yeri gösterir. Yapıştırabileceğiniz sınır 8 MB; daha büyük dosyalarda araç işlemeyi reddeder. Veriniz tarayıcıdan çıkmaz, sunucuya gönderilmez.
Dikkat
Göndermeden önce kontrol listesi
- Son elemandan sonra virgül yok
- Bütün anahtarlar ve metinler çift tırnaklı
- Yorum satırı yok
- true, false ve null küçük harfle yazılmış
- Aynı anahtar bir nesnede bir kez geçiyor
- Kimlik, posta kodu ve telefon gibi değerler metin olarak yazılmış
- Windows yollarındaki ters bölüler çift yazılmış
JSON hatası çoğu zaman tek bir karakterdir ve yerini bulmak düzeltmekten uzun sürer. Bir dahaki sefere mesajı okumak yerine metni JSON Biçimlendirici'ye yapıştırıp satır numarasına bakabilirsiniz.
Bu denemeyi 27 Eylül 2026'da Chrome'da yaptık. Örneklerdeki ad ve adresler kurgusaldır.
Kaynaklar
Alıntı
Bahsedilen
- Belirtilmemiş
Temel Alınan Çalışma
- Belirtilmemiş