Dil seç

JSON'dan XML'e Dönüştürücü

JSON verinizi XML'e çevirin; kök öğe adı, girinti ve bildirim satırı seçenekleriyle çıktıyı sisteminizin beklediği biçime uydurun.

Mehmet Demiray Yayınlandı Güncellendi
Paylaş
Her iç içe geçme düzeyi için boşluk sayısı

JSON'dan XML'e Dönüştürmeye Neden Hâlâ İhtiyaç Var?

JSON bugün web servislerinin çoğunda tercih edilen veri biçimi olsa da, XML kurumsal sistemlerin büyük bölümünde hâlâ ayakta duruyor. Banka entegrasyonları, e-fatura altyapıları, kamu kurumlarının veri alışverişi ve eski SOAP servisleri genellikle yalnızca XML kabul eder. Modern bir uygulamada verileriniz JSON olarak dururken, bağlanmanız gereken sistem XML beklediğinde araya bir çeviri katmanı koymanız gerekir. JSON'dan XML'e Dönüştürücü tam olarak bu boşluğu doldurur.

Türkiye'de entegrasyon çalışan geliştiriciler bu ihtiyaçla sık karşılaşır. GİB'in e-fatura ve e-arşiv servisleri UBL-TR standardını, yani XML tabanlı bir yapıyı kullanır. Aynı şekilde birçok kargo firması, ödeme kuruluşu ve ERP yazılımı dış dünyayla XML üzerinden konuşur. Elinizdeki veri REST API'den JSON olarak geldiğinde, onu bu sistemlerin anlayacağı biçime çevirmek günlük bir iş hâline gelir.

Çevirinin manuel yapılması hem yavaş hem hataya açıktır. Elle etiket yazarken bir kapanış etiketini unutmak ya da özel karakteri kaçırmak, karşı sistemin isteği reddetmesine yol açar. Tarayıcı üzerinde çalışan bir dönüştürücü, veriyi hiçbir sunucuya göndermeden yerel olarak işler; bu da hassas verilerle çalışırken güvenlik açısından rahatlık sağlar.

Kısacası XML ortadan kalkmadı, sadece perde arkasına çekildi. İki biçim arasında köprü kurabilmek, farklı nesillerden sistemleri aynı akışta buluşturmanın en pratik yoludur. Ters yönde bir dönüşüme ihtiyaç duyduğunuzda XML'den JSON'a çeviri aracı ile aynı işi tersine çevirebilirsiniz.

JSON Yapıları XML'e Nasıl Eşlenir?

İki biçim arasındaki çeviri, birkaç temel eşleme kuralına dayanır. Bunları anladığınızda çıktının neden o şekilde oluştuğunu tahmin edebilirsiniz.

JSON nesnesindeki her anahtar, XML'de bir eleman adına dönüşür. Değeri de o elemanın içeriği olur. Örneğin {"ad": "Ayşe"} yapısı <ad>Ayşe</ad> çıktısını verir. İç içe nesneler, iç içe elemanlara karşılık gelir; böylece JSON'daki hiyerarşi XML'de birebir korunur.

Diziler biraz farklı davranır. XML'de dizi kavramı yoktur, bu yüzden bir dizideki her öğe aynı eleman adının tekrarlanmasıyla temsil edilir. Aşağıdaki tablo temel karşılıkları özetler:

JSON XML karşılığı
{"kod": 34} <kod>34</kod>
{"adres": {"il": "İzmir"}} <adres><il>İzmir</il></adres>
{"renk": ["kırmızı", "mavi"]} <renk>kırmızı</renk><renk>mavi</renk>

Burada dikkat çeken nokta, renk dizisinin tek bir sarmalayıcı yerine iki ayrı <renk> elemanı üretmesidir. Karşı sistem bu tekrarları okuyarak diziyi yeniden oluşturur.

Son olarak kök eleman meselesi var. XML belgesinin tek bir kök elemanı olmak zorundadır, oysa JSON doğrudan bir dizi ya da birden fazla alanla başlayabilir. JSON'dan XML'e Dönüştürücü bu yüzden tüm içeriği sizin belirlediğiniz bir kök etiketin içine yerleştirir. Kök adını anlamlı seçmek, çıktının okunabilirliğini artırır. Dönüştürmeden önce JSON'unuzun yapısını düzenlemek isterseniz JSON düzenleme aracı işi kolaylaştırır.

Biçimlendirme Seçenekleri: Bildirim, Girinti ve Öznitelikler

Çıktının nasıl görüneceği tek bir doğruya bağlı değildir; hedef sisteme göre birkaç ayarı size bırakır. Bu seçenekleri doğru kullanmak, hem okunabilir hem de karşı tarafın kabul edeceği bir XML üretmenizi sağlar.

İlk ayar XML bildirimidir. Belgenin en başındaki <?xml version="1.0" encoding="UTF-8"?> satırı, dosyanın sürümünü ve karakter kodlamasını belirtir. Bir dosyayı bağımsız olarak kaydedip başka bir sisteme göndereceğseniz bildirimi açık tutmanız beklenir. Çıktıyı daha büyük bir belgenin içine gömecekseniz kapatmak daha temiz bir sonuç verir.

İkinci ayar girintidir. Girintili çıktı, iç içe elemanları boşluklarla kaydırarak yapıyı gözle takip etmeyi kolaylaştırır. Geliştirme ve hata ayıklama sırasında bu okunabilirlik değerlidir. Buna karşılık üretim ortamında veriyi tek satırda, girintisiz göndermek dosya boyutunu küçültür ve ağ üzerinde daha az yer kaplar.

Üçüncü konu öznitelik ele alışıdır. JSON'da öznitelik kavramı olmadığı için, bazı anahtarları eleman içeriği yerine XML özniteliğine dönüştürmek isteyebilirsiniz. Bunun için genellikle bir önek belirlenir; örneğin @ ile başlayan anahtarlar öznitelik olarak yazılır. Böyle bir yapı {"kitap": {"@isbn": "123"}} girdisini <kitap isbn="123"/> biçiminde üretir.

Aşağıdaki liste hangi durumda hangi ayarı seçmenizi öneriyor:

  1. Bağımsız dosya üretiyorsanız bildirimi açın.
  2. İncelemek için bakıyorsanız girintiyi açın.
  3. Ağda gönderim yapıyorsanız girintiyi kapatın.
  4. Meta bilgileri öznitelik olarak taşıyorsanız önek kuralını belirleyin.

Bu seçimleri baştan netleştirmek, sonradan çıktıyı elle düzeltme ihtiyacını ortadan kaldırır.

Sık Karşılaşılan Sorunlar ve Çözümleri

Çeviri çoğu zaman sorunsuz ilerler, ama JSON'un serbest yapısı XML'in katı kurallarıyla çakıştığında birkaç noktada takılabilirsiniz. Bu tuzakları önceden bilmek zaman kazandırır.

En sık sorun geçersiz eleman adlarıdır. XML eleman adları harf ya da alt çizgiyle başlamak zorundadır; rakamla başlayamaz, boşluk ya da çoğu özel karakteri içeremez. JSON'da ise "2024" ya da "ürün adı" gibi anahtarlar tamamen geçerlidir. Böyle bir anahtar doğrudan eleman adına çevrilemez, çünkü ortaya <2024> gibi geçersiz bir etiket çıkar. Bu durumda anahtarları önceden yeniden adlandırmanız gerekir.

İkinci konu null değerlerdir. JSON'daki null, karşılığı olmayan bir alandır. Dönüşümde bu genellikle boş bir elemana çevrilir; yani {"not": null} yapısı <not/> biçiminde temsil edilir. Karşı sistemin boş elemanı nasıl yorumladığını kontrol etmekte fayda vardır, çünkü bazı ayrıştırıcılar bunu boş metin, bazıları ise eksik değer sayar.

Üçüncü tuzak özel karakterlerdir. XML'de <, > ve & işaretlerinin özel anlamı vardır ve doğrudan metin içinde kullanılamaz. Dönüştürücü bunları otomatik olarak kaçış dizilerine çevirir: & işareti &amp;, < işareti &lt; olur. Bu sayede {"firma": "Yılmaz & Oğulları"} girdisi bozulmadan <firma>Yılmaz &amp; Oğulları</firma> biçiminde çıkar. Bu davranış istisna değil, standardın gereğidir ve çıktının geçerli kalmasını sağlar.

Son olarak Türkçe karakterlere dikkat edin. UTF-8 kodlaması ş, ğ, İ gibi harfleri sorunsuz taşır, ancak hedef sistemin de aynı kodlamayı beklediğinden emin olun. Aksi hâlde içerik doğru çevrilse bile karşı tarafta bozuk görünebilir.

Aracı Adım Adım Kullanma

Dönüştürme işlemi birkaç basit adımdan oluşur ve tamamı tarayıcınızda gerçekleşir. Veriniz hiçbir sunucuya gönderilmediği için hassas içerikle çalışırken içiniz rahat olabilir.

  1. JSON metninizi giriş alanına yapıştırın. Bir API yanıtını ya da yapılandırma dosyasını doğrudan kopyalayabilirsiniz.
  2. Kök eleman adını belirleyin. Bu, üretilecek XML'in en dıştaki sarmalayıcısıdır; içeriğinize uygun anlamlı bir ad seçin.
  3. Biçimlendirme ayarlarını gözden geçirin. Bildirimi açık tutmak, girintiyi ihtiyaca göre ayarlamak ve öznitelik önekini belirlemek bu aşamada yapılır.
  4. Çıktıyı inceleyin. Sonuç anında oluşur; yapının beklediğiniz gibi olup olmadığını buradan kontrol edebilirsiniz.
  5. Kopyala ya da indir seçeneğini kullanın. Sonucu panoya alabilir veya .xml dosyası olarak kaydedebilirsiniz.

Girdiğiniz JSON geçersizse, örneğin bir virgül eksikse ya da tırnak kapatılmamışsa, dönüşüm gerçekleşmez. Böyle durumlarda önce JSON'un sözdizimini düzeltmeniz gerekir. Küçük bir örnek üzerinde deneme yapmak, aracın davranışını anlamanın en hızlı yoludur; örneğin {"urun": {"ad": "Kalem", "fiyat": 15}} gibi kısa bir yapıyla başlayıp çıktının mantığını görebilirsiniz.

Günlük entegrasyon işlerinde bu akış size dakikalar kazandırır. Aynı JSON'u farklı hedef sistemlere göndereceğseniz, yalnızca kök adını ve biçimlendirme ayarlarını değiştirerek birden fazla çıktı üretebilirsiniz. Veriyi bambaşka bir biçime taşımanız gerektiğinde JSON'u CSV'ye çeviren araç tablo tabanlı sistemler için pratik bir alternatif sunar.

JSON ve XML Ne Zaman Hangi Biçim Tercih Edilmeli?

İki biçim de veriyi yapılandırılmış biçimde taşır, ama farklı güçlü yönleri vardır. Doğru biçimi seçmek, projenin bakımını ve entegrasyon maliyetini doğrudan etkiler.

JSON hafiftir ve az yer kaplar. Aynı veriyi genellikle XML'den daha az karakterle ifade eder, bu da mobil uygulamalarda ve yüksek trafikli API'lerde avantaj sağlar. Sözdizimi sade olduğu için okunması ve elle yazılması kolaydır. Modern JavaScript ortamlarında ek bir kütüphane olmadan doğrudan işlenir.

XML ise daha zengin bir yapı sunar. Öznitelikler, ad alanları ve şema doğrulaması gibi özellikler, karmaşık kurumsal belgelerde işe yarar. Bir XML belgesinin bir şemaya uyup uymadığını otomatik olarak denetleyebilirsiniz; bu, resmi veri alışverişinde büyük güvence verir. Belge odaklı içeriklerde, örneğin karışık metin ve etiket barındıran yapılarda XML daha doğal durur.

Aşağıdaki tablo iki biçmi kısaca karşılaştırır:

Ölçüt JSON XML
Boyut Daha küçük Daha büyük
Şema doğrulama Sınırlı Güçlü
Öznitelik desteği Yok Var
Okunabilirlik Yüksek Orta

Pratikte seçim çoğu zaman sizin elinizde olmaz; bağlanacağınız sistem biçimi dayatır. Yeni bir servis tasarlıyorsanız JSON genellikle daha pratiktir. Eski bir kurumsal sisteme ya da resmi bir standarda bağlanıyorsanız XML kaçınılmaz olur. Bu yüzden iki yönde de hızlıca çeviri yapabilmek, farklı dünyaları aynı projede buluşturmanın anahtarıdır.

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

JSON dizileri XML'de nasıl temsil ediliyor?

XML'de dizi diye bir kavram olmadığı için, bir JSON dizisindeki her öğe aynı eleman adının tekrarlanmasıyla yazılır. Örneğin {"etiket": ["a", "b"]} yapısı <etiket>a</etiket><etiket>b</etiket> biçiminde çıkar. Karşı sistem bu tekrar eden elemanları okuyarak diziyi yeniden kurar.

Özel bir kök eleman adını nasıl belirlerim?

Araçtaki kök eleman alanına istediğiniz adı yazmanız yeterli. Bu ad, üretilen XML'in en dıştaki sarmalayıcısı olur ve içeriğinizin tamamını çevreler. İçeriğinize uygun anlamlı bir ad seçin; örneğin sipariş verisi için siparis iyi bir tercih olur. Kök adını boş bırakmayın, çünkü geçerli bir XML belgesinin tek bir kök elemanı olmak zorundadır.

& gibi özel karakterler otomatik kaçırılıyor mu?

Evet. &, < ve > işaretleri XML'de özel anlam taşıdığı için otomatik olarak kaçış dizilerine çevrilir. & işareti &amp;, < işareti &lt; olur. Böylece {"firma": "Kaya & Ortakları"} girdisi bozulmadan geçerli XML üretir. Bu davranışı elle yapmanıza gerek kalmaz.

JSON anahtarım rakamla başlıyorsa ne olur?

XML eleman adları rakamla başlayamaz, bu yüzden {"2024": ...} gibi bir anahtar doğrudan geçerli bir etikete çevrilemez. Ortaya <2024> gibi geçersiz bir eleman çıkardı. Bu durumda anahtarı dönüşümden önce harf ya da alt çizgiyle başlayacak biçimde yeniden adlandırmanız gerekir; örneğin yil2024 gibi.

Verilerim herhangi bir sunucuya gönderiliyor mu?

Hayır. JSON'dan XML'e Dönüştürücü tamamen tarayıcınızda çalışır ve girdiğiniz veriyi hiçbir sunucuya iletmez. Bu sayede müşteri bilgileri, fatura içerikleri ya da kişisel veriler gibi hassas içeriklerle çalışırken güvenlik açısından rahat olabilirsiniz.

Türkçe karakterler çıktıda doğru görünecek mi?

Evet, ş, ğ, İ, ç gibi Türkçe karakterler UTF-8 kodlaması sayesinde sorunsuz taşınır. Tek dikkat etmeniz gereken, çıktıyı gönderdiğiniz sistemin de UTF-8 beklemesidir. Farklı bir kodlama kullanan bir sistemde içerik doğru üretilse bile bozuk görünebilir.

Üretilen XML dosyasını nasıl kaydedebilirim?

Çıktı oluştuktan sonra kopyala seçeneğiyle sonucu panoya alabilir, indir seçeneğiyle de .xml uzantılı bir dosya olarak bilgisayarınıza kaydedebilirsiniz. Kopyalanan içeriği doğrudan kod editörünüze ya da bir istek gövdesine yapıştırabilirsiniz.

Ters yönde, XML'den JSON'a çeviri yapabilir miyim?

Bu araç yalnızca JSON'u XML'e dönüştürür. Ters yöndeki bir dönüşüm için XML'den JSON'a çeviri aracını kullanabilirsiniz. İki aracı birlikte kullanarak veriyi ihtiyaca göre her iki yönde de taşıyabilirsiniz.

Girintili ve girintisiz çıktı arasında nasıl seçim yapmalıyım?

Girintili çıktı, iç içe elemanları boşluklarla kaydırarak yapıyı gözle takip etmeyi kolaylaştırır; inceleme ve hata ayıklama için idealdir. Girintisiz, tek satır çıktı ise dosya boyutunu küçültür ve ağ üzerinde daha az yer kaplar; üretim ortamında gönderim için daha uygundur.