JSON yapıştırın ve anında ayrıştırılıp ayrıştırılmadığını görün. Yaygın sözdizimi hatalarını yakalar: sonda virgül, eksik parantezler, tırnaksız anahtarlar.
Editör yükleniyor...
Editör yükleniyor...
Yukarıdaki girdi neredeyse geçerli JSON’dur. Sorun, ikinci kullanıcı nesnesinde false değerinden sonra gelen sonda virgüldür:
{"name": "Bob", "active": false,}
Bu virgülü kaldırın ve belge geçerli olur:
{
"users": [
{"name": "Alice", "active": true},
{"name": "Bob", "active": false}
]
}
Bu, geliştiricilerin karşılaştığı en yaygın JSON hatasıdır ve JavaScript tolere ettiği için gözden kaçırmak kolaydır.
JSON sözdizimi RFC 8259 ile tanımlanır. Kurallar çoğu insanın beklediğinden daha basittir. Geçerli bir JSON belgesi şunlardan biridir: bir nesne, dizi, string, sayı, boolean (true veya false) veya null. Nesneler, anahtar-değer çiftleri koleksiyonlarıdır. Anahtarlar string olmalıdır (çift tırnaklı). Değerler herhangi bir JSON değeri olabilir. Diziler, sıralı JSON değer listeleridir.
Geliştiricileri en sık takılan yapısal kurallar:
Bir dizideki son öğe veya bir nesnedeki son anahtar sonda virgül içermemelidir. [1, 2, 3,] geçersizdir. {"a": 1, "b": 2,} geçersizdir.
Tüm stringler çift tırnak kullanmalıdır. 'Alice' geçerli JSON değildir. "Alice" geçerlidir.
Nesne anahtarları tırnaklı stringler olmalıdır. {name: "Alice"} JSON değildir. {"name": "Alice"} JSON’dur.
JSON’da yorum sözdizimi yoktur. // yorum ve /* yorum */ ayrıştırma hatasına neden olur. Bu, yapılandırma dosyalarında yorumları destekleyen dillerden gelenleri şaşırtır.
NaN, Infinity ve -Infinity geçerli JSON değerleri değildir. JavaScript NaN değerini JSON.stringify() ile JSON’a serileştirmeye çalışırsanız null alırsınız. Python’un json.dumps() varsayılan olarak ValueError fırlatır.
| Hata | Örnek | Düzeltme |
|---|---|---|
| Sonda virgül | {"a": 1,} |
{"a": 1} |
| Tek tırnaklı stringler | {'key': 'value'} |
{"key": "value"} |
| Tırnaksız anahtarlar | {key: "value"} |
{"key": "value"} |
| Yorumlar | {"a": 1 // not} |
Yorumları kaldırın |
| NaN veya undefined | {"val": NaN} |
null ile değiştirin |
Tarayıcı olmadan hızlı doğrulama için jq standart araçtır. Girdi geçersiz JSON ise sıfır olmayan bir kodla çıkar, bu da betiklerde kullanışlı olmasını sağlar.
Bir dosyayı doğrulama:
jq . file.json
Bir string’i doğrulama:
echo '{"name": "Alice",}' | jq .
# parse error (Expected another key-value pair or '}')
Python’un standart kütüphanesi de herhangi bir bağımlılık olmadan doğrulama yapar:
python3 -m json.tool file.json
CI boru hatları için her iki araç da hatalı girdide yüksek sesle başarısız olan doğrulama adımları olarak çalışır.
| Format | Yorumlar | Sonda virgüller | Tek tırnaklar | Kullanım alanı |
|---|---|---|---|---|
| JSON | Hayır | Hayır | Hayır | Veri alışverişi, API’ler |
| JSONC | Evet | Evet | Hayır | Yapılandırma dosyaları (VS Code) |
| JSON5 | Evet | Evet | Evet | Yapılandırma dosyaları (Babel, ESLint) |
Bir API oluşturuyor veya bir kütüphane tarafından ayrıştırılacak veri yazıyorsanız, katı JSON kullanın. Belirli bir aracın okuyacağı bir yapılandırma dosyası yazıyorsanız, o aracın hangi formatı beklediğini kontrol edin. Bunları karıştırmak, yapılandırma dosyaları standart ayrıştırıcılara aktarıldığında sessiz hataların yaygın bir kaynağıdır.
RFC 8259, 2017’de yayınlanan mevcut JSON spesifikasyonudur. RFC 7159’un yerini almıştır. Spesifikasyon yaklaşık 20 dakikada okunabilir ve bir kez göz atmaya değer. Dilbilgisini resmi olarak tanımlar, sayı hassasiyetini kapsar ve UTF-8 kodlamasını belirtir. Spesifikasyondan önemli bir nokta: bir JSON ayrıştırıcısının bir nesnedeki yinelenen anahtarları kabul etmesine veya reddetmesine izin verilir. Çoğu ayrıştırıcı bunları kabul eder ve son değeri kullanır, ancak davranış tanımsızdır ve buna güvenmemelisiniz.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.