İçeriğe geç

JSON Biçimlendirici rehberi

Araç rehberi. Güncellendi .

XGM JSON Biçimlendirici girdiyi tarayıcının katı ayrıştırıcısıyla nasıl doğrular, yaygın hata mesajları ne anlama gelir, sondaki virgüller nasıl düzeltilir.

Geçerli JSON neye benzer

JSON (JavaScript Object Notation, RFC 8259), nesnelerden, dizilerden, metinlerden, sayılardan, mantıksal değerlerden ve null değerinden kurulan, yapılandırılmış veriler için bir metin biçimidir. JavaScript'e benzer ama ondan çok daha katıdır. JavaScript'in kabul ettiği pek çok girdi, örneğin tırnaksız anahtarlar ya da sondaki virgüller, geçerli JSON değildir ve katı bir ayrıştırıcı bunları reddeder. Bu katılık bilerek seçilmiştir: biçim ne kadar dar olursa, farklı diller ve çalışma ortamları aynı belgeyi o kadar aynı şekilde okur. Elle yazılmış bir yapılandırma dosyasını bir uygulamaya vermeden önce doğrulamanın en ucuz yolu da budur.

JSON değer türleri
TürÖrnekKurallar
Nesne{"name": "XGM"}Anahtarlar çift tırnak içinde metin olmalıdır
Dizi[1, 2, 3]Virgülle ayrılır, sonda virgül olmaz
Metin"hello\n"Yalnızca çift tırnak; kontrol karakterleri kaçırılmalıdır
Sayı42, -1.5, 2e10Baştaki sıfır olmaz, NaN ve Infinity olmaz, onaltılık olmaz
Mantıksaltrue, falseKüçük harf
NullnullKüçük harf
Biçimlendirici girdinizle ne yaparGirdi katı biçimde ayrıştırılır; başarılı olursa seçilen girintiyle ve isteğe bağlı anahtar sıralamasıyla biçimlendirilir ya da küçültülür, başarısız olursa ilk hatanın konumu gösterilir.JSON'u yapıştırınSayfada kalır; hiçbir şey yüklenmezKatı ayrıştırma (RFC 8259)Tarayıcının JSON ayrıştırıcısı, JSON.parse ileaynısıHata var mı?İlk sorunun satırı ve sütunu, mesajıylabirlikteBaşarılı2 boşluk, 4 boşluk ya da sekmeyle okunaklıyazma, veya küçültmeİsteğe bağlı: anahtarları sıralaNesne anahtarları her düzeyde alfabetiksıralanır
Girdi katı biçimde ayrıştırılır; başarılı olursa seçilen girintiyle ve isteğe bağlı anahtar sıralamasıyla biçimlendirilir ya da küçültülür, başarısız olursa ilk hatanın konumu gösterilir.

JSON Biçimlendirici nasıl kullanılır

  1. JSON Biçimlendirici aracını açın ve JSON'unuzu yapıştırın ya da Örnek yükle düğmesine basın.
  2. Girintiyi (2 boşluk, 4 boşluk ya da sekme) ve anahtarların sıralanıp sıralanmayacağını seçin.
  3. Okunaklı biçimde yazmak için Biçim düğmesine (ya da Ctrl+Enter tuşlarına), boşlukları temizlemek için Küçült düğmesine basın.
  4. Girdi geçersizse hatayı, satırını ve sütununu okuyun, düzeltin ve yeniden deneyin.
  5. Sonucu kopyalayın ya da dışa aktarın; hiçbir şey yüklenmez.

Anahtarları sıralamak iki JSON belgesini karşılaştırırken işe yarar: ikisi de sıralanmış anahtarlarla biçimlendirildiğinde, bir metin farkı yeri değişmiş alanları değil, yalnızca gerçek farklılıkları gösterir. Dizileri değiştirmez, çünkü onların sırası verinin kendisinin bir parçasıdır. Aynı yöntem sürüm kontrolünde de yardımcı olur: biçimlendirilmiş ve sıralanmış bir yapılandırma dosyasının commit farkları kısa ve okunabilir kalır. Çıktı her zaman UTF-8'dir ve kaçırılmış karakterleri olduğu gibi korur, dolayısıyla veriniz biçimlendirme sırasında değişmez.

Yaygın hatalar ve düzeltmeleri

Sık görülen JSON sözdizimi hataları
HataGeçersizGeçerli
Sondaki virgül{"a": 1,}{"a": 1}
Tek tırnak{'a': 'b'}{"a": "b"}
Tırnaksız anahtar{a: 1}{"a": 1}
Yorum satırı{"a": 1 // note}Yorumları kaldırın
NaN veya Infinity{"x": NaN}{"x": null} ya da bir metin
Metin içinde kaçırılmamış satır sonu"line 1 + satır sonu + line 2""line 1\nline 2"
Eksik virgül{"a": 1 "b": 2}{"a": 1, "b": 2}
Baştaki sıfır{"n": 007}{"n": 7}

Hatadaki satır ve sütun, ayrıştırıcının sorunu fark ettiği yeri gösterir; bu yer çoğu zaman asıl yanlışın hemen ardındadır. Eksik bir virgül bir sonraki değerin başında bildirilir, kapatılmamış bir metin ise çok daha ilerideki bir satırda ortaya çıkabilir. Konuma ve onun birkaç karakter öncesine bakın. Uzun bir belgede en hızlı yöntem, bildirilen satıra gidip bir üstteki satırı da okumaktır. Girdiyi önce biçimlendirmek de yardımcı olur, çünkü tek satıra sıkıştırılmış bir JSON'da sütun numarası tek başına pek bir şey anlatmaz.

Yorum içeren yapılandırma dosyaları

JSONC, JSON5 ya da tsconfig.json biçemi gibi biçimler yorumlara ve sondaki virgüllere izin verir. Bunlar JSON değildir, bu yüzden katı bir doğrulayıcı onlar için hata bildirir. Yorumları kaldırın ya da o biçim için yazılmış bir araç kullanın.

Sayılar, duyarlık ve büyük değerler

JSON'un kendisi sayı büyüklüğünü sınırlamaz, ancak JavaScript sayıları 64 bitlik kayan noktalı değerler olarak temsil eder. 2^53 − 1 (9007199254740991) değerinden büyük tam sayılar bir tarayıcıda ayrıştırıldığında duyarlığını yitirir. 19 haneli bir kimlik numarası, biçimlendirmeden son haneleri değişmiş olarak çıkabilir. Bu sessiz bir kayıptır: ne ayrıştırıcı ne de biçimlendirici uyarı verir, çünkü sonuç sözdizimi açısından kusursuz görünür.

Büyük tam sayılarda duyarlık kaybı
Input:  {"id": 12345678901234567891}
Parsed: {"id": 12345678901234567000}

Büyük kimlikler kullanan API'ler, örneğin bazı sosyal ağlar ve veritabanları, tam da bu nedenle o değerleri çoğu zaman metin olarak gönderir. Böyle bir veriyi incelerken ham metnin bir kopyasını saklayın ve büyük tam sayıların biçimlendirilmiş çıktısına ihtiyatla yaklaşın. Aynı durum, kayan noktanın tam olarak temsil edemediği çok duyarlı ondalık değerler için de geçerlidir. Para tutarlarını en küçük birim cinsinden tam sayı olarak ya da metin olarak taşımak bu yüzden yaygın bir alışkanlıktır.

JSON ile çalışırken gizlilik

JSON çoğu zaman kişisel veri, token ya da iç tanımlayıcı taşıyan API yanıtlarını içerir. XGM biçimlendiricisi her şeyi tarayıcınızda işler; girdi saklanmaz, sunucuya gönderilmez ve URL'ye eklenmez. Yalnızca tarayıcıda çalışan araçlar ayrıca yerel son kontroller geçmişine de hiçbir zaman kaydedilmez. Sayfayı yenilediğinizde girdi alanı boşalır, yani veriniz sekmeyi kapattığınız anda ortadan kalkar.

Yine de, yerel bir araç kullanabiliyorken API anahtarı ya da oturum token'ı gibi canlı gizli değerleri herhangi bir web sayfasına yapıştırmaktan kaçının. Biçimlendirilmiş JSON'u destek kayıtlarında veya sohbetlerde paylaşmadan önce hassas değerleri yer tutucularla değiştirin. Ekran görüntüleri için de aynı kural geçerlidir; bir kayıtta bir kez göründükten sonra bir token artık gizli sayılmaz.

Komut satırında JSON'u yerel olarak biçimlendirme
# Python
python3 -m json.tool --indent 2 data.json

# jq
jq . data.json
jq -S . data.json   # sorted keys
jq -c . data.json   # minified

JSON'u çoğu zaman başka biçimlere çevirmek ya da başka gözlerle incelemek gerekir. CSV'den JSON'a modu elektronik tablo dışa aktarımlarını JSON dizilerine çevirir, JWT Çözücü token'ların içindeki JSON'u okur ve Kod Biçimlendirici diğer yaygın veri biçimini ele alır. API hata ayıklaması için HTTP Başlıkları Kontrolü bir sunucunun gönderdiği Content-Type değerini gösterir. CSV ayrıştırıcısı RFC 4180'i izler, dolayısıyla tırnaklı alanlar virgül, tırnak ve satır sonu içerebilir.

Bir API yanıtını incelemenin hızlı bir yolu, onu curl ile almak ve gövdesini biçimlendiriciye yapıştırmaktır. Örneğin curl -s https://api.example.com/v1/orders/42 komutu tek satırlık, küçültülmüş bir JSON döndürür; biçimlendirildiğinde iç içe yapısı ve alan adları kolayca okunur hâle gelir. Çıktıyı paylaşmadan önce token'ları ve kişisel verileri temizleyin. Yanıtı bir dosyaya kaydedip jq ile incelemek de aynı işi komut satırında görür.

Bir API, JSON yerine HTML bir hata sayfası döndürdüğünde biçimlendirici 1. satır, 1. sütunda hata bildirir, çünkü < geçerli JSON değildir. Bu genellikle isteğin API'nin kendisine değil, bir vekil sunucuya, oturum açma sayfasına ya da bir sunucu hatasına takıldığı anlamına gelir. Aynı belirti, kimlik doğrulaması isteyen bir uç noktaya token göndermeden gidildiğinde de ortaya çıkar.

Geçerli bir JSON yanıtı application/json olarak sunulmalıdır. JSON'u text/html olarak gönderen sunucular tarayıcıda içerik türü tahminine yol açabilir ve istemcileri tahmin yürütmeye zorlar; X-Content-Type-Options: nosniff başlığının var olma nedenlerinden biri de budur. Karakter kümesini ayrıca belirtmeye gerek yoktur, çünkü RFC 8259 ağ üzerinde taşınan JSON'un UTF-8 ile kodlanmasını şart koşar.

SSS

JSON'um yükleniyor mu?

Hayır. Ayrıştırma ve biçimlendirme tarayıcınızda olur; girdi saklanmaz ve URL'ye eklenmez. Sayfa bir kez açıldıktan sonra çevrimdışı da çalışır.

JavaScript nesnem neden geçerli JSON değil?

JSON, anahtarların ve metinlerin çift tırnak içinde olmasını ister; sondaki virgüllere, yorumlara, undefined değerine, fonksiyonlara ve NaN gibi özel sayılara izin vermez.

Biçimlendirici verimi değiştirir mi?

Biçimlendirme yalnızca boşlukları değiştirir. Anahtarları sıralamak nesne anahtarlarının sırasını değiştirir. Çok büyük tam sayılar duyarlık yitirebilir, çünkü tarayıcılar sayıları kayan noktalı değer olarak ayrıştırır.

Büyük dosyaları işleyebilir mi?

Tipik API yanıtlarını ve yapılandırma dosyalarını rahatça işler. Onlarca megabaytlık çok büyük belgeler sayfayı yavaşlatabilir, çünkü her şey tarayıcı sekmesinde olup biter. Böyle dosyalar için komut satırındaki jq daha uygundur.

Hata konumu ne anlama gelir?

Ayrıştırıcının sorunu bulduğu satır ve sütun. Asıl yanlış çoğu zaman bu konumun hemen öncesindedir; örneğin eksik bir virgül ya da kapatılmamış bir tırnak.

JSON yinelenen anahtarlara izin verir mi?

RFC 8259 adların benzersiz olması gerektiğini söyler ve ayrıştırıcılar yinelenenleri farklı ele alır. Tarayıcı ayrıştırıcısı son değeri tutar, bu yüzden yinelenen anahtarlar biçimlendirilmiş çıktıda sessizce kaybolur.

2 boşluk mu, 4 boşluk mu kullanmalıyım?

Bu bir üslup tercihidir. İki boşluk web projelerinde, dört boşluk bazı dillerin geleneklerinde yaygındır. Taşıma için en iyisi küçültülmüş JSON'dur.

Biçimlendirme ile küçültme arasındaki fark nedir?

Biçimlendirme okumayı kolaylaştırmak için girinti ve satır sonu ekler. Küçültme ise en küçük boyut için gereksiz tüm boşlukları kaldırır.

Geçerli görünen JSON neden ayrıştırılamıyor?

Görünmez karakterler sık rastlanan bir nedendir: belgelerden ya da sohbet uygulamalarından kopyalanan bölünemez boşluklar ve tipografik tırnaklar normal boşluk ve tırnak gibi görünür ama öyle değildir. Bildirilen konumun çevresindeki tırnakları elle yeniden yazın.

Bayt sırası işareti içeren JSON geçerli midir?

RFC 8259, gerçekleştirimlerin ağ üzerinden gönderilen JSON'a bayt sırası işareti eklememesi gerektiğini söyler ve ayrıştırıcılar onu yok sayabilir. Katı bir ayrıştırıcı ilk karakterden şikâyet ediyorsa işareti kaldırın.

Kaynaklar