Dil seç

XML'den JSON'a Dönüştürücü

XML belgelerini JSON'a çevirin; öznitelik koruma, tekrarlı öğeleri diziye çevirme, sayı ve mantıksal değer ayrıştırma seçenekleriyle.

Mehmet Demiray Yayınlandı Güncellendi
Paylaş
XML özniteliklerini dahil etmek yerine atla
JSON çıktısını biçimlendirmek için kullanılan boşluk

XML ve JSON Veri Modelleri Arasındaki Farklar

XML ve JSON, veriyi metin biçiminde taşıyan iki köklü format. Aralarındaki temel ayrım, veriyi nasıl yapılandırdıkları. XML etiket tabanlı bir işaretleme dili; her değer bir açılış ve kapanış etiketi arasında yer alır ve bir etikete hem alt öğeler hem de nitelikler (attribute) eklenebilir. JSON ise anahtar-değer çiftlerinden, dizilerden ve iç içe nesnelerden oluşan daha yalın bir yapıya sahip.

Bu yalınlık, dönüşümde bazı kavramların doğrudan karşılığı olmadığı anlamına gelir. XML'de bir öğe hem nitelik taşıyabilir hem de içinde metin ve alt öğeler barındırabilir. Örneğin <kitap dil="tr">Yaban</kitap> yapısında dil bir nitelik, Yaban ise metin içeriğidir. JSON'da nesnelerin niteliği yoktur; her şey bir anahtardır. XML'den JSON'a Dönüştürücü bu farkı, niteliklere özel bir önek ekleyerek çözer.

Aşağıdaki tablo iki modelin kavramlarını karşılaştırır:

XML kavramı JSON karşılığı
Öğe (element) Anahtar-değer çifti
Nitelik (attribute) Önekli anahtar
Tekrarlanan öğe Dizi
Metin içeriği Metin değeri

JSON, özellikle web tabanlı arayüzler ve modern API'ler için tercih edilir çünkü JavaScript ile doğrudan uyumludur ve ayrıştırması hızlıdır. XML ise eski kurumsal sistemlerde, yapılandırma dosyalarında ve SOAP servislerinde hâlâ yaygın. İki dünya arasında köprü kurmak gerektiğinde bu araç işi kolaylaştırır. Ters yönde bir dönüşüme ihtiyaç duyarsanız JSON'dan XML'e çeviri aracı aynı mantığı tersine işletir.

Dönüşüm Eşlemesi Nasıl Çalışır?

Aracın kalbinde, XML ağacını JSON nesnesine çeviren bir eşleme mantığı bulunur. Her XML öğesi, adıyla bir JSON anahtarına dönüşür. Öğenin içindeki metin, o anahtarın değeri olur. İç içe öğeler ise iç içe JSON nesnelerine karşılık gelir. Böylece belgenin hiyerarşisi korunur.

İki durum özel işlem gerektirir. Birincisi nitelikler. XML'de bir öğenin nitelikleri, alt öğelerinden farklı bir yerde durur; JSON'da böyle bir ayrım yok. Karışıklığı önlemek için nitelikler bir önekle işaretlenir. Varsayılan olarak @ öneki kullanılır, yani <fiyat birim="TRY">100</fiyat> yapısı şuna dönüşür:

{"fiyat": {"@birim": "TRY", "#text": "100"}}

Buradaki #text anahtarı, öğenin metin içeriğini niteliklerinden ayırır. Önek karakterini seçeneklerden değiştirebilir, nitelikleri tümden yok saymayı da tercih edebilirsiniz.

İkinci özel durum tekrarlanan öğeler. Aynı ana öğe altında aynı adı taşıyan birden fazla öğe varsa, bunlar tek tek anahtarlar olarak yazılamaz çünkü JSON'da bir nesnede aynı anahtar iki kez bulunamaz. Bu yüzden tekrarlanan öğeler otomatik olarak bir diziye toplanır. Örneğin üç <urun> öğesi içeren bir listede sonuç, üç elemanlı bir urun dizisi olur.

Önemli bir ayrıntı: bir öğe belgede yalnızca bir kez geçiyorsa dizi oluşmaz, tekil bir değer olur. Aynı öğe iki kez geçtiğinde ise dizi belirir. Bu davranış, veriyi işleyen kodunuzun bazen tekil bir nesne bazen bir dizi görebileceği anlamına gelir. Çıktıyı işlerken bu olasılığı hesaba katmakta fayda var.

Tür Dönüştürme Seçenekleri: Sayılar ve Mantıksal Değerler

XML'de her şey metindir. <yas>34</yas> öğesindeki 34 değeri, XML açısından bir sayı değil, sadece rakamlardan oluşan bir dizgedir. JSON ise sayı, mantıksal değer (true/false) ve metni birbirinden ayıran tiplere sahiptir. Bu ayrımı kullanabilmek için aracın tür dönüştürme (type coercion) seçenekleri devreye girer.

Sayı ayrıştırma seçeneği açıkken, tamamen sayısal görünen metin değerleri JSON sayısına çevrilir. <adet>12</adet> çıktıda "adet": 12 olur, tırnaksız. Bu, sonuçları doğrudan hesaplamada kullanacaksanız pratiktir çünkü değeri ayrıca sayıya çevirmeniz gerekmez.

Mantıksal değer ayrıştırma seçeneği ise true ve false metinlerini gerçek JSON mantıksal değerlerine dönüştürür. <aktif>true</aktif> öğesi "aktif": true biçimini alır.

Bu seçenekleri kullanırken dikkat edilecek bir konu var. Bazı değerler sayıya benzese de aslında metin olarak kalmalıdır. Örneğin başında sıfır olan bir posta kodu ya da ürün stok kodu sayıya çevrilirse baştaki sıfır kaybolur. 01000 değeri 1000 olur ki bu artık aynı bilgi değildir. Benzer biçimde çok uzun kimlik numaraları sayı kesinliği sınırlarına takılabilir. Bu tür alanlar için tür dönüştürmeyi kapalı tutmak daha güvenli.

Bir başka seçenek de değerlerin başındaki ve sonundaki boşlukları kırpmaktır. XML belgeleri okunabilirlik için sıklıkla girinti ve satır sonu içerir; kırpma seçeneği bu fazlalıkları temizleyerek daha temiz bir JSON üretir. Yaklaşık %90 oranında belgede bu ayar beklendiği gibi çalışır, ancak boşluğun anlamlı olduğu ender durumlarda kapatmak gerekebilir.

Dönüşümün Bilgi Kaybettiği Durumlar

XML ve JSON aynı ifade gücüne sahip değil. Bu yüzden bazı XML yapıları JSON'a çevrildiğinde basitleşir ve tam bir geri dönüş her zaman mümkün olmaz. Bu aracı üretim akışlarında kullanmadan önce kayıp yaşanabilecek noktaları bilmek önemli.

İlk konu ad alanları (namespace). XML'de <ns:baslik> gibi öneklerle tanımlanan ad alanları, öğe adlarının çakışmasını önler. Dönüşümde bu önekler sadeleştirilir; ad alanı bildirimleri ayrı bir yapı olarak korunmaz. SOAP gibi ad alanına yoğun dayanan belgelerde bu, anlamsal bir kayıp doğurabilir.

İkinci konu sıralama. XML'de öğelerin belge içindeki sırası anlamlıdır ve korunur. JSON nesnelerinde ise anahtar sırası standartça garanti edilmez. Farklı adlı ardışık öğeleri JSON nesnesine çevirdiğinizde, orijinal sıralamayı güvenilir biçimde geri kuramayabilirsiniz. Yalnızca aynı adlı tekrarlanan öğeler dizide sıralarını korur.

Üçüncüsü karışık içerik (mixed content). Bir öğe hem metin hem de alt öğe içeriyorsa, örneğin <p>Merhaba <b>dünya</b></p> gibi, JSON bu iç içe geçmiş metin akışını temsil etmekte zorlanır. Metin ve öğeler ayrı anahtarlara dağılır, aralarındaki konum ilişkisi kaybolur.

Son olarak yorumlar ve işlem talimatları çıktıda yer almaz. Bu kayıplar bir hata değil, iki model arasındaki doğal farkın sonucudur. Veri odaklı, düzenli yapılı XML belgelerinde dönüşüm neredeyse kusursuz çalışır; belge odaklı, karışık içerikli XML'de ise beklentiyi ayarlamak gerekir. Çıktıyı düzenli görüntülemek için JSON düzenleyici aracını kullanarak sonucu inceleyebilirsiniz.

Aracı Adım Adım Kullanma

Dönüşüm tamamen tarayıcı içinde gerçekleşir, yani XML verileriniz hiçbir sunucuya gönderilmez. Bu, gizli veya kurumsal verilerle çalışırken önemli bir güvence sağlar. Aracı kullanmak birkaç basit adımdan oluşur:

  1. XML metnini giriş alanına yapıştırın veya doğrudan yazın.
  2. İhtiyacınıza göre seçenekleri ayarlayın: nitelikleri koruma ve önek karakteri, XML bildirimini yok sayma, değerleri kırpma, sayı ve mantıksal değer ayrıştırma.
  3. Sonucu anında JSON çıktı alanında görün.
  4. Çıktıyı tek tıkla kopyalayın veya .json dosyası olarak indirin.

Giriş XML'i geçersizse, örneğin bir etiket kapatılmamışsa ya da yapı bozuksa, araç ayrıştırma hatasını açık bir mesajla bildirir. Böylece sorunun belgenin hangi bölümünde olduğunu anlayıp düzeltebilirsiniz. Hata mesajını dikkate alarak eksik kapanış etiketini veya hatalı karakteri bulmak genellikle birkaç saniye sürer.

Uzun belgelerle çalışırken önce küçük bir örnek parçayla seçeneklerin çıktıya etkisini görmek pratik bir alışkanlık. Önek karakterini ya da tür dönüştürmeyi açıp kapatarak sonucun nasıl değiştiğini gözlemleyin, ardından tüm belgeyi çevirin. Bu araç, eski XML tabanlı veri akışlarını modern JSON tabanlı servislere taşıyan geliştiriciler için gündelik bir yardımcı. Benzer bir dönüşümü tablo verileriyle yapmanız gerekirse CSV'den JSON'a dönüştürücü aynı çalışma mantığını izler.

Gerçek Dünya Kullanım Senaryoları

XML'den JSON'a dönüşüm, günlük geliştirme işlerinin pek çok noktasında karşımıza çıkar. En yaygın senaryo, eski sistemlerle modern uygulamaları birbirine bağlamak. Türkiye'de bankacılık, sigorta ve kamu entegrasyonlarında XML tabanlı web servisleri hâlâ yaygın. Bu servislerden gelen yanıtı bir React ya da mobil uygulamada kullanacaksanız, veriyi JSON'a çevirmek işi ciddi biçimde kolaylaştırır.

Bir başka örnek, ürün ya da haber beslemeleri (feed). Birçok eski e-ticaret altyapısı ürün kataloğunu XML olarak yayınlar. Bu beslemeyi JSON'a çevirip modern bir arama motoruna veya öneri sistemine beslemek tipik bir görevdir. Örneğin 5.000 ürünlük bir XML kataloğu, JSON'a çevrildikten sonra çok daha az kodla işlenebilir.

Yapılandırma dosyaları da sık rastlanan bir alan. Eski uygulamaların config.xml dosyalarını, JSON tabanlı yeni bir yapılandırma sistemine taşırken bu araç köprü görevi görür. Aynı şekilde, üçüncü taraf servislerin döndürdüğü XML raporları hızlıca inceleyip anlamlandırmak için de kullanışlıdır.

Geliştirme sırasında hata ayıklarken de değerlidir. Bir SOAP yanıtının içeriğini okumak XML'in etiket yoğunluğu yüzünden zahmetli olabilir. Aynı veriyi JSON'a çevirdiğinizde yapı çok daha okunur hale gelir ve hangi alanın hangi değeri taşıdığını hızla görürsünüz. Kısacası bu araç, iki veri dünyası arasında gidip gelen herkes için zaman kazandıran bir yardımcı. Tek seferlik bir dönüşüm için de, tekrarlayan bir entegrasyon işinin ilk taslağını çıkarmak için de uygundur.

En çok yanıtladıklarımız.

XML nitelikleri JSON'da neden bir önekle gösteriliyor?

XML'de bir öğenin nitelikleri, alt öğelerinden ayrı bir yerde durur. JSON'da ise böyle bir ayrım yoktur, her şey bir anahtardır. Bir niteliğin adıyla bir alt öğenin adı aynı olsaydı çakışırlardı. Bu karışıklığı önlemek için nitelikler @ gibi bir önekle işaretlenir, böylece hangi anahtarın nitelik hangisinin alt öğe olduğu net kalır. Önek karakterini seçeneklerden değiştirebilirsiniz.

Aynı adı taşıyan tekrar eden XML öğeleri JSON'da nasıl görünür?

Bir ana öğe altında aynı adlı birden fazla öğe varsa, bunlar otomatik olarak bir diziye toplanır çünkü JSON'da bir nesnede aynı anahtar iki kez bulunamaz. Örneğin üç <urun> öğesi, üç elemanlı bir urun dizisine dönüşür. Öğe belgede yalnızca bir kez geçiyorsa dizi değil tekil bir değer üretilir, bu yüzden çıktıyı işleyen kodunuzun her iki olasılığı da karşılaması iyi olur.

Bu araçla SOAP yanıtlarını dönüştürebilir miyim?

Evet, SOAP yanıtları da XML olduğu için dönüştürülebilir ve gelen yanıtı okunur hale getirmek için pratiktir. Ancak SOAP yoğun biçimde ad alanı (namespace) kullanır ve araç bu önekleri sadeleştirir. Yani sonuç, yanıtın içeriğini incelemek için mükemmeldir ama tam sadık bir geri dönüş garanti etmez. Hata ayıklarken ve alanları hızlıca görmek için ideal.

CDATA bölümleri ve yorumlara ne olur?

CDATA içindeki metin, normal metin içeriği gibi işlenir ve ilgili anahtarın değerine yerleştirilir; özel işaretlemesi çıktıda kaybolur ama içerdiği veri korunur. XML yorumları (<!-- ... -->) ile işlem talimatları ise JSON çıktısında yer almaz, çünkü JSON'da bunların karşılığı yoktur. Bu bir hata değil, iki format arasındaki doğal farkın sonucudur.

Verilerim dönüşüm sırasında bir sunucuya gönderiliyor mu?

Hayır. Tüm dönüşüm doğrudan tarayıcınızda gerçekleşir, XML veriniz hiçbir sunucuya iletilmez. Bu nedenle kurumsal, gizli veya kişisel veri içeren belgeleri güvenle çevirebilirsiniz. İnternet bağlantınız kesilse bile araç çalışmaya devam eder.

Sayısal görünen değerlerin metin olarak kalmasını nasıl sağlarım?

Sayı ayrıştırma seçeneğini kapalı tutun. Bu seçenek açıkken tamamen sayısal görünen değerler JSON sayısına çevrilir ve başındaki sıfırlar kaybolur. Posta kodu, stok kodu ya da uzun kimlik numaraları gibi alanlarda 01000 değerinin 1000 olmaması için tür dönüştürmeyi devre dışı bırakmak daha güvenlidir.

Geçersiz bir XML yapıştırırsam ne olur?

Araç, ayrıştırma hatasını açık bir mesajla bildirir. Kapatılmamış bir etiket, yanlış eşleşen etiketler ya da bozuk bir karakter varsa sorunun ne olduğunu görürsünüz ve düzeltebilirsiniz. Giriş geçerli bir XML haline gelene kadar JSON çıktısı üretilmez.

XML bildirimini (declaration) çıktıya dahil etmek zorunda mıyım?

Hayır. Belgenin başındaki <?xml version="1.0"?> bildirimini yok saymak için bir seçenek vardır. Bu bildirim genellikle veri içermediği için çıktıdan çıkarmak daha temiz bir JSON verir. İhtiyacınıza göre bu ayarı açıp kapatabilirsiniz.

Ters yönde, JSON'u tekrar XML'e çevirebilir miyim?

Bu araç yalnızca XML'den JSON yönünde çalışır. Ters dönüşüm için JSON'dan XML'e çeviri aracını kullanabilirsiniz. Çıktı JSON'unu daha okunur biçimde görüntülemek veya doğrulamak isterseniz JSON düzenleyici işinizi görür.