XML ile JSON arasındaki fark nedir?
İki veri biçiminin farkı, elinizdekini tanıma ve çevirince değişenler
Bir sistem sizden XML dosyası istedi, elinizde ise bir uygulamadan indirdiğiniz .json uzantılı bir dosya var. Ya da tersi oldu: muhasebeciniz bir e-fatura XML'i gönderdi, siz onu JSON bekleyen bir programa vermeye çalışıyorsunuz. Bu yazı o anda sorulan tek soruyu cevaplıyor: bu iki biçim arasındaki fark tam olarak ne ve sizin işiniz için hangi kısmı önemli.
Kısa cevap şu: ikisi de veriyi düz metin olarak taşır ve aynı bilgiyi yazabilir. Ayrıldıkları yer, verinin nasıl işaretlendiği ve karşı taraftaki programın hangisini okumayı bildiğidir. Yani çoğu durumda seçimi siz yapmazsınız, dosyayı alacak sistem yapar. Size düşen, elinizdekinin hangisi olduğunu anlamak ve çevirirken neyin değiştiğini bilmektir.
Aynı kayıt iki biçimde: farkı gözle görün
Farkı anlamanın en hızlı yolu aynı bilgiyi yan yana koymaktır. Aşağıdaki şemada bir siparişin numarası, müşterisi ve tutarı önce XML, sonra JSON olarak elle yazıldı. İçerik birebir aynı; değişen yalnızca ambalaj.
XML'de her değer bir etiketin içine girer: <musteri> ile açılır, </musteri> ile kapanır. Etiket adı her değerde iki kez yazıldığı için aynı kayıt XML'de daha uzun tutar. JSON'da ad bir kez yazılır, ardından iki nokta üst üste ve değer gelir; kaydın sınırını da süslü parantez çizer. Şemanın altındaki karakter sayısı bu farkın somut ölçüsüdür.
Elinizdeki dosya hangisi? İlk karaktere bakın
Uzantı her zaman doğruyu söylemez. Bazı programlar XML'i .txt ya da .dat adıyla verir, bazı servisler JSON'u hiç uzantısı olmayan bir dosya olarak indirir. Kesin yol dosyanın içine bakmaktır ve bunun için özel bir programa gerek yok. Not Defteri'ni (Mac'te TextEdit'i) açın ve dosyayı programın kendi Dosya > Aç komutuyla seçin. Windows'ta bu pencerenin sağ altındaki dosya türü kutusunu "Tüm Dosyalar" yapın; yoksa .txt ile bitmeyen dosya listede görünmez. Açılan metinde boşlukları atlayıp ilk görünen işarete bakın:
- İlk işaret < ise, hele dosya <?xml diye başlıyorsa: elinizdeki XML'dir
- İlk işaret { ya da [ ise: JSON'dur
- Satırlar noktalı virgül ya da virgülle bölünmüş düz yazıysa ikisi de değildir; büyük ihtimalle CSV'dir
- Anlamsız simgeler görüyorsanız dosya metin değildir (örneğin sıkıştırılmış bir paket); bu durumda iki biçimden hiçbiri söz konusu değildir
Farklar tek tabloda
Şemadaki ayrımların gündelik karşılığı aşağıda. Üçüncü satıra özellikle dikkat edin: çeviri sırasında en çok şaşırtan fark odur ve bir sonraki bölümlerde yeniden karşınıza çıkacak.
| Konu | XML | JSON |
|---|---|---|
| Yazım | Açılış ve kapanış etiketleri: <ad>…</ad> | Süslü parantez ve "ad": değer çiftleri |
| Ek bilgi | Etiketin kendisine iliştirilebilir: <siparis no="1042"> | Böyle bir yer yoktur; her bilgi ayrı bir alandır |
| Sayı mı yazı mı | Dosyada her değer yazıdır; türünü ayrı bir şema dosyası söyler | Sayı tırnaksız, yazı tırnaklı durur; true, false ve null ayrı türlerdir |
| Liste | Aynı adlı etiket art arda tekrarlanır | Köşeli parantez içinde sıralanır: [ … ] |
| Not düşmek | <!-- … --> arasına açıklama yazılabilir | Açıklama satırı tanımlı değildir |
| En dış katman | Belgede tek bir dış etiket olmak zorundadır | Böyle bir zorunluluk yoktur |
| Uzunluk | Adlar tekrarlandığı için daha uzun | Aynı veri için daha kısa |
Neden bir yer XML, öbürü JSON istiyor?
Biçimi, dosyayı okuyacak program belirler; o program hangi biçime göre yazıldıysa onu bekler. XML daha eskidir ve resmî belge alışverişi, muhasebe yazılımları, kurumlar arası sistemler büyük ölçüde onun üzerine kuruldu. Türkiye'de e-Fatura ve e-Arşiv belgeleri, Gelir İdaresi'nin UBL-TR adını verdiği XML yapısında düzenlenir; muhasebecinizden gelen fatura dosyasının .xml olması bu yüzdendir.
JSON ise web servislerinin ve telefon uygulamalarının ortak dili hâline geldi. Bir uygulamada "verilerimi indir" dediğinizde ya da bir sitenin arka planında iki program konuştuğunda çoğunlukla JSON dolaşır. Haber sitelerinin RSS beslemeleri ve arama motorlarına verilen site haritaları (sitemap.xml) ise hâlâ XML'dir.
Bunun pratik sonucu şudur: "hangisi daha iyi" sorusu sizin için genellikle boşa düşer. Karşı taraf XML bekliyorsa kusursuz bir JSON bile geri çevrilir. Elinizdeki biçim istenenle uyuşmuyorsa yapılacak iş çeviridir; seçim gerçekten size bırakılmışsa, dosyayı alacak programın yardım sayfasındaki örnek dosyaya bakın ve o biçimde kalın.
Gelir İdaresi'nin e-Fatura teknik belgeleri ve UBL-TR paketleri →
Çevirince ne değişir, bilgi kaybolur mu?
İki biçim aynı bilgiyi taşır ama aynı kalıpla değil; bu yüzden çeviri bir kopya değil, uyarlamadır. Bu sitedeki dönüştürücüler uyarlamayı aşağıdaki gibi yapar ve yaptığını saklamaz:
- XML'den JSON'a: etikete iliştirilmiş bilgi kaybolmaz, başına @ konmuş bir alan olur. <siparis no="1042"> satırındaki numara JSON'da "@no": "1042" diye görünür
- XML'den JSON'a: bütün değerler tırnaklı yazı olarak gelir. XML dosyada sayıyı yazıdan ayırmadığı için 249.90 da "249.90" olur; hesap yapacak program onu sayıya kendisi çevirmelidir
- XML'den JSON'a: <!-- --> arasındaki açıklamalar ve en baştaki <?xml ?> satırı aktarılmaz, çünkü JSON'da karşılıkları yoktur
- JSON'dan XML'e: etikete iliştirilmiş bilgi üretilmez, her anahtar ayrı bir etiket olur; karşı sistem numarayı etiketin içinde bekliyorsa çıktıyı elle düzeltmeniz gerekir
- JSON'dan XML'e: sayı ile yazının ayrımı kalkar, ikisi de etiketin içinde düz metin olarak durur
Resmî belgeyi çevirip geri göndermeyin
Yukarıdaki uyarlamaların bir sonucu var: bir dosyayı XML'den JSON'a, sonra yeniden XML'e çevirdiğinizde başladığınız belgeyi birebir geri alamazsınız. Etiket adları, sıra ve ek bilgilerin yeri değişebilir. Gündelik veri için bu önemsizdir; resmî bir belge için önemlidir.
E-fatura gibi elektronik imzalı belgelerde imza, dosyanın her karakterine bağlıdır; tek bir boşluk değişse bile imza doğrulanamaz hâle gelir. Bu tür bir XML'i çevirmenin meşru amacı okumaktır: içindeki kalemleri görmek, tutarları başka bir tabloya almak. Aslını olduğu gibi saklayın, gönderilecekse aslını gönderin; çevirdiğiniz kopyayı yalnızca kendi kullanımınız için tutun.
Çevirmeden önce dosyanın sağlam olduğundan emin olun
Dönüştürücüler ancak kurallarına uygun bir belgeyle çalışır. XML'de kapatılmamış tek bir etiket ya da tırnaksız bir değer bütün dosyayı okunmaz kılar. Elinizdeki XML tek satıra sıkışmışsa ya da bir sistem "dosya geçersiz" diyorsa önce XML Biçimlendirme aracına yapıştırın: metin girintili hâle gelir, bir hata varsa satırı ve sütunu söylenir. JSON için aynı işi JSON Biçimlendirme aracı görür.
Bu kontrolün bir sınırı var: belgenin yazım kurallarına uyup uymadığına bakar, karşı sistemin beklediği alanların eksiksiz olup olmadığına bakmaz. Hangi alanların zorunlu olduğunu kurumun yayımladığı şema dosyası (XSD) belirler. Yani "iyi biçimli" sonucu dosyanın okunabildiğini söyler, kurumun onu kabul edeceğini garanti etmez.
Sık sorulanlar
XML mi daha iyi, JSON mu?
Genel bir kazanan yok. Dosyayı alacak sistem hangisini istiyorsa o doğrudur. Seçim tamamen sizdeyse ve veri web servisleri ya da uygulamalar arasında dolaşacaksa JSON daha kısa ve yaygındır; kurumlar arası resmî belge alışverişinde ise XML hâlâ standarttır.
XML dosyasını JSON'a çevirince bilgi kaybolur mu?
Değerler kaybolmaz, kalıpları değişir: etikete iliştirilmiş bilgiler @ ile başlayan alanlara dönüşür, sayılar tırnaklı yazı olarak gelir. Kaybolan tek şey <!-- --> arasındaki açıklamalardır, çünkü JSON'da açıklama yazılacak bir yer yoktur.
e-Fatura XML'ini nasıl okunur hâle getiririm?
Fatura kalemlerini tablo olarak görmek istiyorsanız XML'den Excel'e aracı tekrarlanan kayıtları satıra, alanları sütuna döker. Yalnızca içeriğe göz atmak istiyorsanız XML Biçimlendirme aracı metni girintili ve okunur hâle getirir. Her iki durumda da asıl dosyaya dokunulmaz.
JSON dosyamı XML isteyen bir sisteme verebilir miyim?
JSON'dan XML'e aracıyla çevirip verebilirsiniz. Göndermeden önce sistemin örnek dosyasıyla karşılaştırın: en dıştaki etiketin adı ve liste öğelerinin adı beklenenle aynı olmalı. Araç en dış etiketin adını sizin yazmanıza izin verir.
HTML ile XML aynı şey mi?
Görünüşleri benzer, ikisi de açılı ayraçlı etiket kullanır. Ama HTML'in etiketleri sabittir ve bir sayfanın ekranda nasıl görüneceğini anlatır; XML'de etiket adlarını veriyi hazırlayan taraf koyar ve amaç görüntü değil, verinin kendisidir.
Son güncelleme: 12 Ekim 2026