Yaygın JSON Sözdizimi Hataları ve Doğrulayıcı Kullanarak Bunları Düzeltme
Yaygın JSON Hataları
JSON'un katı sözdizimi kuralları, tek bir yanlış yerleştirilmiş karakterin bile tüm bir belgeyi bozabileceği anlamına gelir. En yaygın JSON hatalarını anlamak, daha hızlı hata ayıklamanıza ve aynı hataları tekrarlamaktan kaçınmanıza yardımcı olacaktır. Aşağıda, geliştiricilerin karşılaştığı en sık sorunlar ve her biri için net açıklamalar ve düzeltmeler bulunmaktadır.
1. Sondaki Virgüller
Hata: Nesne veya dizi sonunda Unexpected token
Sondaki virgüller JavaScript nesnelerinde ve dizilerinde kullanılabilir ancak JSON'da kesinlikle yasaktır.
Geçersiz JSON:
{
"name": "Alice",
"age": 30,
}
Düzeltme: Son öğeden sonra virgülü kaldırın.
{
"name": "Alice",
"age": 30
}
Sondaki virgüllü diziler:
// Geçersiz
[1, 2, 3,]
// Geçerli
[1, 2, 3]
2. Anahtarların Etrafında Eksik veya Yanlış Tırnak
Hata: Unexpected identifier veya Expected double-quoted property name
JSON, tüm nesne anahtarlarının çift tırnak içine alınmasını gerektirir. JavaScript'te çalışsa da, tek tırnak ve tırnaksız anahtarlar geçerli değildir.
Geçersiz JSON:
{
name: "Alice",
'occupation': "Engineer"
}
Düzeltme: Anahtarları her zaman çift tırnak içine alın.
{
"name": "Alice",
"occupation": "Engineer"
}
3. Dize Değerleri için Tek Tırnak Kullanımı
Hata: Unexpected identifier veya Unterminated string
Tıpkı anahtarlar gibi, dize değerleri de JSON'da çift tırnak kullanmalıdır. Tek tırnak geçerli değildir.
Geçersiz JSON:
{ "greeting": 'Hello, world!' }
Düzeltme: Tek tırnakları çift tırnakla değiştirin.
{ "greeting": "Hello, world!" }
İpucu: Dizeniz çift tırnak içeriyorsa, ters eğik çizgi ile kaçış karakteri kullanın: "He said, \"Hello\"".
4. Kaçış Karakteri Kullanılmayan Özel Karakterler
Hata: Unexpected token veya Invalid character
JSON dizelerinde belirli karakterler kaçış karakteri ile kullanılmalıdır: çift tırnak ("), ters eğik çizgi (\) ve kontrol karakterleri.
Geçersiz JSON:
{
"path": "C:\Users\Documents\file.json",
"quote": "He said "hello""
}
Düzeltme: Ters eğik çizgileri ve çift tırnakları düzgün şekilde kaçış karakteri ile kullanın.
{
"path": "C:\\Users\\Documents\\file.json",
"quote": "He said \"hello\""
}
JSON Kaçış Dizilerinin Tam Listesi
| Dizi | Temsil Ettiği |
|----------|-----------|
| \" | Çift tırnak |
| \\ | Ters eğik çizgi |
| \/ | Düz eğik çizgi |
| \b | Geri silme |
| \f | Form besleme |
| \n | Yeni satır |
| \r | Satır başı |
| \t | Sekme |
| \uXXXX | Unicode karakter (örn. é için \u00E9) |
5. Geçersiz Sayısal Formatlar
Hata: Unexpected number veya Invalid number
JSON, sayıların nasıl formatlanabileceğine dair belirli kurallara sahiptir:
- Başta sıfır kullanılamaz (
01geçersizdir) - Yalnızca
0sayısı için tek bir baştaki sıfıra izin verilir - Sayılar sondaki noktaya sahip olamaz (
10.geçersizdir) - Onaltılık, sekizlik ve ikili formatlar desteklenmez
Geçersiz JSON:
{
"invalid1": 01,
"invalid2": 10.,
"invalid3": 0xFF,
"invalid4": 1,000
}
Düzeltme:
{
"valid1": 1,
"valid2": 10.0,
"valid3": 255,
"valid4": 1000
}
6. Geçersiz Değerler: undefined, NaN, Infinity
Hata: undefined, NaN, Infinity için Unexpected token
JavaScript'te, JSON karşılığı olmayan değerler vardır. Bunlar ayrıştırma hatalarına neden olur:
Geçersiz JSON:
{
"undefinedVal": undefined,
"notANumber": NaN,
"infinity": Infinity
}
Düzeltme: Geçerli JSON değerleriyle değiştirin veya bir kural kullanın.
{
"undefinedVal": null,
"notANumber": null,
"infinity": 1.7976931348623157e+308
}
7. Fazla Virgül veya Eksik Virgül
Hata: Expected comma veya Unexpected token
JSON'da virgüller her anahtar/değer çiftini ve dizi öğesini ayırmalıdır, ancak son öğeden sonra bulunmamalıdır.
Eksik virgül (geçersiz):
{
"name": "Alice"
"age": 30
}
Düzeltme: Eksik virgülü ekleyin.
{
"name": "Alice",
"age": 30
}
8. Derin İç İçe Yapı Sorunları
Hata: Maximum call stack size exceeded veya ayrıştırıcı zaman aşımı
Bir sözdizimi hatası olmamakla birlikte, derin iç içe JSON (10+ seviye) performans sorunlarına neden olabilir ve hata ayıklamayı son derece zorlaştırabilir.
Sorunlu yapı:
{
"level1": {
"level2": {
"level3": {
"level4": {
"level5": {
"level6": {
"value": "too deep"
}
}
}
}
}
}
}
Daha iyi yaklaşım: Yapıyı düzleştirin veya referanslar kullanın.
{
"users": {
"alice": { "role": "admin" }
},
"permissions": {
"admin": ["read", "write", "delete"]
}
}
9. Eksik Açılış veya Kapanış Parantezleri
Hata: Expected ',' or '}' veya Unexpected end of JSON input
Eşleşmeyen süslü ve köşeli parantezler, özellikle büyük veya elle yazılmış JSON dosyalarında yaygın bir JSON hatası kaynağıdır.
Geçersiz JSON:
{
"name": "Alice",
"items": [1, 2, 3
}
Düzeltme: Her { için eşleşen bir } ve her [ için eşleşen bir ] olduğundan emin olun.
{
"name": "Alice",
"items": [1, 2, 3]
}
Profesyonel ipucu: Açılış ve kapanış parantezlerini görsel olarak eşleştirmek için JSON'unuzu düzgün şekilde girintileyin. Bir JSON formatlayıcı bunu otomatik olarak yapabilir.
JSON Hatalarını Etkili Şekilde Hata Ayıklama
- Bir JSON doğrulayıcı kullanın — İlk hatanın tam satırını ve sütununu almak için JSON'unuzu ücretsiz bir JSON doğrulayıcıya yapıştırın.
- Artımlı olarak doğrulayın — Büyük dosyalar için, hatayı izole etmek üzere her seferinde bir bölümü doğrulayın.
- Kopyala-yapıştır kalıntılarına dikkat edin — Kelime işlemcilerden veya web sayfalarından genellikle görünmez karakterler, akıllı tırnaklar ve bölünmez boşluklar sızar.
- Karakter kodlamasını kontrol edin — Dosyanızın UTF-8 olarak kaydedildiğinden emin olun. Diğer kodlamalar görünmez hatalara neden olabilir.
- Bir linter kullanın —
jsoneklentili ESLint gibi araçlar, geliştirme sırasında JSON hatalarını yakalar.
Unutmayın: JSON ayrıştırıcıları genellikle yalnızca ilk sözdizimi hatasını bildirir. Onu düzeltin, yeniden doğrulayın ve belge geçene kadar tekrarlayın. JSON Formatlayıcı ve Doğrulayıcı aracımız, bu süreci hızlandırmak için anında, ayrıntılı hata mesajları sunar.