← Tüm araçlar

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

JSON'u XML'e ve XML'i JSON'a tarayıcınızda anında dönüştürün. Yerel ve gizli; özellik, dizi, ad alanı ve dikkat edilecek noktalar hakkında notlarla.

JSON'dan XML'e ve geri: iki veri dünyası için pratik bir dönüştürücü

Çoğu geliştirici, ister istesin ister istemesin hem XML hem JSON ile çalışır. Modern web API'leri neredeyse tamamen JSON konuşur; ancak bir bankayla, sigortacıyla, devlet uç noktasıyla, kurumsal ERP'yle veya eski bir SOAP servisiyle temas ettiğiniz anda XML yeniden karşınıza çıkar. Bu sayfadaki JSON'dan XML'e dönüştürücü, JSON'u XML'e ve XML'i tekrar JSON'a doğrudan tarayıcınızda çevirir; bu sayede hassas yükleri uzak bir servise kopyalamadan iki biçim arasında geçiş yapabilirsiniz.

Koyu indigo arka plan üzerinde parantezli XML etiketlerinden oluşan bir ağaca dönüşen parlayan iç içe JSON parantezleri
JSON nesneleri ve XML etiket ağaçları, aynı veriyi farklı şekillerle tanımlar.

XML ve JSON gerçekte nedir

XML (Extensible Markup Language), iç içe etiketler, özellikler ve ad alanları etrafında inşa edilmiş bir işaretleme biçimidir. Belgeler ve yapılandırılmış veri alışverişi için tasarlanmıştır ve çok sayıda mekanizma taşır: şemalar (XSD), ad alanları, işlem talimatları, yorumlar, CDATA bölümleri ve en üstte resmi bir bildirim. Bu zenginlik, XML'in eski ve kurumsal sistemlerde hâlâ baskın olmasının nedenidir. SOAP web servisleri, RSS ve Atom akışları, yapılandırma dosyaları (Spring, Maven, .NET uygulama yapılandırmaları), ofis belge biçimleri ve bankaların ve sigortacıların her gün XML alışverişi yapmaya devam ettiği SWIFT ve ISO 20022 gibi finansal mesajlaşma standartlarında karşınıza çıkar.

JSON (JavaScript Object Notation) çok daha basittir: anahtar/değer çiftleriyle nesneler, diziler, dizeler, sayılar, boolean'lar ve null. Neredeyse her programlama dilinin veri yapılarıyla bire bir örtüşür; modern web API'lerini, REST uç noktalarını, mobil uygulamaları ve package.json gibi yapılandırma dosyalarını ele geçirmesinin nedeni tam olarak budur. JSON, eşdeğer XML'den tipik olarak yüzde 30 ila 50 daha küçüktür ve XML'i ayrıntılı yapan kapanış etiketleri ile özellik mekanizmasını düşürdüğünden belirgin ölçüde daha hızlı ayrıştırılır.

Dönüşüm için önem taşıyan temel farklılıklar

İki biçim birbirleriyle eşlenecek kadar örtüşür, ancak tam olarak değil. Birkaç yapısal fark neredeyse tüm sürtüşmeye yol açar:

  • Özellikler ve alt düğümler. XML, <user id="1"> (bir özellik) ile <user><id>1</id></user> (alt öğe) arasında ayrım yapar. JSON'un böyle bir kavramı yoktur; bu nedenle dönüştürücüler bir tane icat eder. Uzlaşım gereği özellikler @attributes gibi bir anahtara katlanır ya da @ ile öneklenir; öğe metni ise #text gibi bir anahtara gider.
  • Diziler. JSON yerel dizilere sahiptir. XML ise sahip değildir. XML'deki bir liste, yalnızca arka arkaya üç <item> öğesi gibi aynı etiketin tekrarlanmasıdır. Dönüştürücüler, tekrarlayan kardeşlerin bir JSON dizisine ne zaman katlanacağını ve tek bir öğenin ne zaman sıradan nesne kalacağını çıkarsamak zorundadır.
  • Ad alanları. XML, şemalar arasındaki ad çakışmalarını önlemek için ad alanları (xmlns:soap önekleri) kullanır. JSON'un eşdeğeri yoktur; bu nedenle önekler ya anahtarlarda gerçek karakter olarak kalır ya da silinir.
  • Ayrıntılılık ve meta veri. XML, özellikler aracılığıyla bir düğüme meta veri ekleyebilir; JSON her şeyi anahtar ve değer olarak ifade eder. Bu, JSON'u daha kompakt ve okunabilir kılarken XML, XSD şemaları aracılığıyla doğrulama gücünü korur.

Dikkat edilmesi gereken dönüşüm tuzakları

JSON'u XML'e, oradan tekrar JSON'a dönüştürmek ve özdeş sonuç beklemek klasik hatadır. Kuralları kontrol etmediğiniz sürece dönüşüm her iki yönde de kayıplıdır. Bunları aklınızda tutun:

  • Özellikler bozuluyor. JSON'u XML'e dönüştürdüğünüzde, araç hangi anahtarların özellik, hangilerinin öğe olacağına dair bir kurala ihtiyaç duyar. Ters yönde gidildiğinde özellikler bir yere konmak zorundadır ve o "yer" (@ öneki, @attributes bloğu) kütüphaneler arasında farklılık gösterir. Downstream ayrıştırıcı farklı bir uzlaşım bekliyorsa veri kaybolmamış olsa bile yanlış görünür.
  • Tek öğe ve dizi. Bir <item> içeren XML akışı JSON nesnesi üretir; aynı akış iki öğeyle JSON dizisi üretir. Dizi varsayan kod, tek öğeli durumda bozulur. Bu, RSS ve SOAP ayrıştırma hatalarının yaygın bir kaynağıdır.
  • Ad alanları sızıyor veya kayboluyor. Araca bağlı olarak soap:Body, tam anlamıyla soap:Body adlı bir anahtar haline gelebilir ya da önek tamamen düşürülerek belgenin anlamı değişebilir.
  • Karma içerik ve türler. XML her şeyi metin olarak değerlendirir; bu nedenle true veya 42 gibi bir değer JSON'a dönüşümden sonra dize olarak kalabilir; ters yönde ise yorumlar veya CDATA için doğal bir yer yoktur.
Siyan ve altın rengi ışıktan yapılmış soyut işaretleme düğümleriyle köprülenen iki yapılandırılmış veri ağacı
Biçimler arasında eşleme yapmak, özellik, dizi ve ad alanlarının nasıl çevrileceğine karar vermeyi gerektirir.

Neden yalnızca yerel dönüşüm önemlidir

JSON ve XML yükleri, geliştiricinin işlediği en hassas şeyler arasındadır: token'larla dolu API yanıtları, hesap numaraları içeren SOAP mesajları, kimlik bilgileri barındıran yapılandırma dosyaları. Tarayıcınızda çalışan bir dönüştürücü bunların hiçbirini yüklemez. Ayrıştırma ve serileştirme işlemleri makinenizde gerçekleşir; sunucuya hiçbir şey gönderilmez ve sayfa bir kez yüklendiğinde araç çevrimdışı da kullanılabilir. Üretim verilerini hata ayıklamak veya uyumluluk rejimine tabi olan her şey için bu, güvenli hızlı bir kontrol ile kazara veri sızıntısı arasındaki farktır.

Sonucu daha sonra düzenlemeniz gerekiyorsa bunu diğer veri dönüştürücülerle birleştirin ya da çıktınızı boru hattındaki bir sonraki araca geçirmeden önce JSON biçimlendiriciyle düzenleyin.

Sıkça sorulan sorular

Dönüştürücü JSON veya XML'imi herhangi bir yere yükliyor mu?

Hayır. JSON'dan XML'e ve XML'den JSON'a dönüşüm tamamen tarayıcınızda çalışır. Veriniz hiçbir zaman cihazınızı terk etmez; sayfa yüklendikten sonra araç çevrimdışı da çalışır.

JSON'a dönüştürürken XML özellikleri nasıl işlenir?

XML özelliklerinin JSON'da yerel bir karşılığı olmadığından, ayrılmış bir anahtara yerleştirilirler; genellikle at işaretiyle öneklenir ya da bir özellikler bloğu altında gruplanır. Öğe metin içeriği ayrı olarak depolanır; böylece her ikisi de dönüşümden sağ çıkar.

Tek XML öğem neden dizi yerine nesne oldu?

XML'in yerel dizisi yoktur; liste yalnızca tekrarlanan bir etikettir. Yalnızca bir öğe mevcut olduğunda dönüştürücüler onu sıradan bir nesneden ayırt edemez ve nesne olur. Aynı etiket adına sahip iki veya daha fazla kardeş, JSON dizisine katlanır.

soap veya xmlns gibi XML ad alanlarına ne olur?

JSON'da XML ad alanlarına eşdeğer bir şey yoktur. Dönüşüme bağlı olarak önek, anahtarda gerçek metin olarak tutulur ya da tamamen silinir. Downstream tüketiciniz ad alanı öneklerine bağımlıysa çıktıyı kontrol edin.

JSON'u tekrar XML'e dönüştürüp orijinal belgeyi geri alabilir miyim?

Her zaman tam olarak değil. Yorumlar, CDATA ve özellik ile öğe ayrımı gibi XML özellikleri temiz bir JSON karşılığına sahip olmadığından dönüşüm her iki yönde kayıplıdır. Gidiş-dönüş, her iki tarafta da adlandırma kurallarını siz kontrol ettiğinizde en iyi sonucu verir.

JSON'a kıyasla XML hâlâ nerede kullanılıyor?

XML, eski ve kurumsal sistemlerde yaşıyor: SOAP web servisleri, RSS ve Atom akışları, yapılandırma dosyaları ve SWIFT ve ISO 20022 gibi finansal mesajlaşma. JSON ise modern web API'leri, REST uç noktaları ve mobil uygulamalara hâkim.