XML'den JSON'a
XML belgesini JSON nesnesine çevirin; öznitelikler ve tekrarlı etiketler korunur
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
XML metnini sol panele yapıştırın; sonuç siz yazarken sağ panelde belirir. Belge dört kurala göre JSON'a çevrilir. Öznitelikler adının başına @ konarak nesneye girer, böylece aynı adı taşıyan bir alt etiketle karışmazlar. Bir etiketin içinde yalnızca metin varsa o etiket doğrudan metnin kendisine iner; etiketin ayrıca özniteliği ya da alt etiketi varsa metin '#text' anahtarına konur. Aynı ebeveyn altında aynı adla tekrarlanan etiketler tek bir diziye toplanır, sıraları korunur. CDATA bölümlerinin içeriği olduğu gibi alınır, yorum satırları ve <?xml?> bildirimi atlanır. Belge iyi biçimli değilse hata Türkçe olarak, hangi etikette ve kaçıncı satırda kalındığı söylenerek verilir — kapatılmamış etiket, eşleşmeyen kapanış ve tırnaksız öznitelik değeri ayrı ayrı bildirilir. Çıktıyı tek tıkla kopyalayabilir veya .json dosyası olarak indirebilirsiniz.
Bu araç xml to json, xml okuma aramalarıyla da biliniyor.
XML nedir?
XML (Extensible Markup Language), veriyi iç içe etiketlerle işaretleyen bir belge biçimidir: her veri parçası açılış ve kapanış etiketi arasında durur, etiketlere ek bilgi özniteliklerle iliştirilir. HTML'e benzer ama etiket kümesi sabit değildir — adları veriyi tanımlayan taraf belirler. Kamu ve kurumsal sistemlerin gövdesi hâlâ XML üzerine kuruludur: e-fatura ve e-arşiv belgeleri, SOAP servisleri, RSS beslemeleri, ofis dosyalarının içi ve mobil uygulama yapılandırmaları bu biçimi kullanır. Belgenin 'iyi biçimli' sayılması için tek bir kök etiketi olması, her etiketin kapatılması ve öznitelik değerlerinin tırnak içinde yazılması gerekir.
CDATA nedir?
CDATA bölümü, XML ayrıştırıcısına 'buranın içindeki her şeyi düz metin say' diyen özel bir bloktur ve <![CDATA[ ... ]]> arasında yazılır. Normalde bir metin içinde geçen < ve & işaretleri etiket ya da varlık başlangıcı sanılır ve belgeyi bozar; bunlardan kaçmak için ya her işareti < & biçiminde yazmak ya da metni CDATA'ya almak gerekir. Kod parçası, HTML kesiti ya da içinde bol işaret geçen serbest açıklama taşıyan alanlarda CDATA okunurluğu belirgin biçimde artırır. Bu araç CDATA içeriğini olduğu gibi alır, içindeki işaretlere dokunmaz.
XML ile JSON arasındaki fark nedir?
İkisi de veriyi metin olarak taşır, ama farklı sorulara cevap verirler. XML bir işaretleme dilidir: veriyi etiketlerle sarmalar, aynı etikete öznitelik iliştirebilir, metnin içine gömülü yapı kurabilir ve şema (XSD) ile 'bu belgede hangi alan zorunlu' sorusunu resmen yanıtlayabilir. Bu ayrıntı e-fatura gibi hukuki geçerliliği olan belgelerde işe yarar. JSON ise bir veri yapısı gösterimidir: nesne, dizi, sayı, dize ve mantıksal değerden ibarettir, öznitelik kavramı yoktur ve daha az yer kaplar. Web servisleri JSON'a bu sadelik yüzünden geçti — hemen her dil onu tek satırda okur. Dönüşümdeki asıl zorluk da bu asimetriden doğar: XML'in özniteliklerine ve tekrarlı etiketlerine JSON'da doğrudan karşılık olmadığı için bu araç @ öneki ve dizi toplama gibi kurallar uygular.
Dönüşüm kuralları
XML ile JSON'un veri modeli birebir örtüşmez; bu yüzden her dönüştürücü kendi kurallarını açıklamak zorundadır. Bu araç şu kuralları uygular:
- Öznitelik → '@ad' anahtarı: <urun kod="TR-11"> etiketi '@kod' alanını verir
- Yalnızca metin içeren etiket → doğrudan dize: <musteri>Ayşe</musteri> için değer 'Ayşe' olur
- Metin + öznitelik ya da alt etiket → metin '#text' anahtarına konur
- Aynı adla tekrarlanan kardeş etiketler → dizi; sıraları belgedeki gibi kalır
- Boş etiket (<not/>) → boş dize
- CDATA içeriği olduğu gibi alınır, yorumlar ve <?xml?> bildirimi atlanır
Tek eleman mı, dizi mi? Bilinmesi gereken tuzak
Dönüşüm kararı belgedeki tekrar sayısına bakar: bir etiket iki kez geçiyorsa dizi, bir kez geçiyorsa doğrudan nesne olur. XML'in kendisinde 'burası her zaman listedir' diyen bir bilgi yoktur; bu ancak şemadan (XSD) bilinir ve şema burada okunmaz.
Pratik sonuç şudur: aynı yapıdaki iki belge farklı JSON üretebilir. Tek ürünlü bir sipariş nesne, iki ürünlü sipariş dizi verir. Çıktıyı bir kodda kullanacaksanız o alanı okurken dizi olup olmadığını kontrol edin; bu, XML'den JSON'a geçen sistemlerde en sık karşılaşılan hatadır.
Kapsam sınırları: namespace, DTD ve varlıklar
Bu araç tarayıcının içinde çalışan, elle yazılmış küçük bir ayrıştırıcı kullanır. Kapsamı bilinçli olarak dardır ve sınırları burada açıkça yazılıdır:
- Ad alanı (namespace) çözümlemesi yapılmaz: 'ns:etiket' adı önekiyle birlikte olduğu gibi anahtar olur, xmlns öznitelikleri de sıradan öznitelik sayılır
- DTD ve <!DOCTYPE> bildirimi atlanır; orada tanımlanan özel varlıklar genişletilmez
- Yalnızca & < > " ' ile &#NNN; ve &#xNN; biçimindeki sayısal referanslar çözülür; tanınmayan varlık metinde olduğu gibi kalır
- Şema (XSD) doğrulaması yapılmaz; yalnızca belgenin iyi biçimli olup olmadığına bakılır
Varlık genişletme neden kapalı?
DTD içinde tanımlanan varlıklar birbirini çağırabilir. On satırlık bir tanım kümesi, çözüldüğünde gigabaytlarca metne açılabilir; bu, 'entity bombası' ya da 'milyar gülüş saldırısı' diye bilinen klasik bir kaynak tüketme yöntemidir. Genişletme yapan ayrıştırıcılar bu belgeyi işlemeye kalkınca sekmeyi kilitler.
Dönüşüm sizin cihazınızda çalıştığı için bedelini de siz ödersiniz. Bu yüzden varlık çözümü beş öngörülü kısaltma ve sayısal referanslarla sınırlı tutuldu; dış kaynak okuyan ya da özyinelemeli genişleyen hiçbir tanım işlenmez.
Sık sorulanlar
Öznitelikler neden @ ile başlıyor?
XML'de bir etiketin hem 'kod' adlı özniteliği hem 'kod' adlı alt etiketi olabilir; JSON'da ikisi aynı anahtara düşer ve biri kaybolur. Öznitelik adlarının başına @ konarak bu çakışma engellenir. Bu, XML'den JSON'a çeviride yaygın kabul görmüş bir uzlaşımdır.
Aynı XML'i iki kez çevirdiğimde neden farklı yapı çıkıyor?
Yapı değişmiyor, veri değişiyor: bir etiket belgede tek kez geçtiğinde nesne, iki veya daha fazla geçtiğinde dizi olur. Listelerin her zaman dizi olmasını istiyorsanız çıktıyı kullanan tarafta o alanı okurken dizi denetimi yapmanız gerekir.
Ad alanı önekli etiketler (ns:etiket) çalışıyor mu?
Etiketler okunur ve dönüştürülür, ancak ad alanı çözümlenmez: önek anahtarın parçası olarak kalır, yani 'ns:etiket' adı JSON'da da 'ns:etiket' olur. xmlns öznitelikleri de silinmez, '@xmlns' alanı olarak görünür.
Yapıştırdığım XML bir yere gönderiliyor mu?
Hayır. Ayrıştırma ve dönüşüm tamamen tarayıcınızın içinde yapılır; fatura, sipariş ya da yapılandırma belgesi yapıştırsanız bile veri bu sayfadan çıkmaz.