ToolDeck

XML'den JSON'a

XML'yi JSON biçimine dönüştür

Örnek dene

XML Girdisi

JSON Çıktısı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
JSON burada görüntülenecektir…

XML'den JSON'a Dönüşüm Nedir?

XML'den JSON'a dönüşüm, verilerin Genişletilebilir İşaretleme Dili (XML) biçiminden JavaScript Nesne Gösterimi'ne (JSON) dönüştürülmesi işlemidir. Her iki biçim de yapılandırılmış, hiyerarşik verileri temsil eder; ancak farklı sözdizimi ve veri modelleri kullanır. XML, isteğe bağlı özniteliklere sahip açılış ve kapanış etiketleri kullanırken JSON, anahtar-değer çiftleri, diziler ve ilkel türler kullanır. XML'yi JSON'a dönüştürmek, XML verilerini JavaScript çalışma zamanları, REST API'leri ve NoSQL veritabanları gibi JSON'ın yerel biçim olduğu ortamlarda kullanmanızı sağlar.

Dönüşüm her zaman bire bir değildir. XML'in doğrudan JSON karşılığı bulunmayan yapıları vardır: öznitelikler, karma içerik (metin ile alt öğelerin iç içe geçmesi), işleme talimatları, yorumlar, CDATA bölümleri ve ad alanı bildirimleri. Farklı dönüşüm kütüphaneleri bu yapıları farklı biçimlerde ele alır; bu nedenle birden fazla kural seti mevcuttur. En yaygın yaklaşım, öznitelik adlarına @ öneki ekler ve aynı öğede öznitelik bulunduğunda metin içeriğini #text alanına yerleştirir.

XML'den JSON'a dönüşüm, SOAP'tan REST'e geçiş yaparken, eski kurumsal API'leri tüketirken veya XML zorunlu kılan devlet ve finans veri akışlarını işlerken sık başvurulan bir adımdır. Üreticileri ve tüketicileri aynı anda yeniden yazmak yerine ekipler, sınır katmanında XML yükünü dönüştürür ve JSON'ı aşağı akışa iletir. AWS API Gateway, Apache Camel ve MuleSoft bu kalıbı yerel olarak destekler.

XML input
<bookstore>
  <book category="fiction">
    <title lang="en">The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <year>1925</year>
    <price>10.99</price>
  </book>
  <book category="non-fiction">
    <title lang="en">Sapiens</title>
    <author>Yuval Noah Harari</author>
    <year>2011</year>
    <price>14.99</price>
  </book>
</bookstore>
JSON output
{
  "bookstore": {
    "book": [
      {
        "@category": "fiction",
        "title": {
          "@lang": "en",
          "#text": "The Great Gatsby"
        },
        "author": "F. Scott Fitzgerald",
        "year": "1925",
        "price": "10.99"
      },
      {
        "@category": "non-fiction",
        "title": {
          "@lang": "en",
          "#text": "Sapiens"
        },
        "author": "Yuval Noah Harari",
        "year": "2011",
        "price": "14.99"
      }
    ]
  }
}

Neden Çevrimiçi XML'den JSON'a Dönüştürücü Kullanmalısınız?

Tek seferlik bir dönüşüm betiği yazmak zaman alır; özellikle XML öznitelikler, ad alanları veya JSON dizisine dönüşmesi gereken tekrarlayan öğeler içeriyorsa. Tarayıcı tabanlı bir dönüştürücü, yapıyı inceleyip işinize devam edebilmeniz için JSON çıktısını saniyeler içinde sunar.

Anında Dönüşüm
XML yapıştırın ve JSON çıktısını hemen alın. Bir kütüphane kurmanıza, betik yazmanıza veya derleme aracı yapılandırmanıza gerek yoktur.
🔒
Gizlilik Öncelikli İşleme
Tüm dönüşüm, JavaScript kullanılarak tarayıcınızda çalışır. XML verileriniz makinenizi hiç terk etmez ve herhangi bir sunucuya asla yüklenmez.
🔀
Öznitelik ve Dizi Desteği
Öznitelikler, @ önekli anahtarlarla eşlenir. Tekrarlayan kardeş öğeler, Parker veya BadgerFish kuralına göre otomatik olarak JSON dizilerine gruplandırılır.
📋
Hesap Gerekmez
Sayfayı açın, XML'nizi yapıştırın ve JSON sonucunu kopyalayın. Kayıt formu yok, API anahtarı yok, kullanım sınırı yok.

XML'den JSON'a Dönüşüm Kullanım Senaryoları

Frontend Geliştirme
XML API yanıtlarını JSON'a dönüştürerek istemci paketinize XML ayrıştırma kütüphanesi eklemeden React, Vue veya Angular bileşenlerinde veri oluşturun.
Backend Mühendisliği
SOAP yüklerini, RSS/Atom beslemelerini veya XML-RPC yanıtlarını, JSON girdisi bekleyen mikro hizmetlere veri iletmeden önce API ağ geçidi katmanında JSON'a dönüştürün.
DevOps ve CI/CD
JUnit, NUnit, xUnit gibi XML test raporlarını panolar, Slack botları veya özel CI bildirim işlem hatları tarafından alınabilmesi için JSON'a dönüştürün.
QA ve Test
Dönüştürülmüş JSON anlık görüntülerini beklenen çıktıyla karşılaştırarak XML üreten bir hizmetin sürümler arasında yanıt yapısını değiştirmediğini doğrulayın.
Veri Mühendisliği
Devlet portallarından, finans beslemelerinden (FIX, FIXML) veya sağlık sistemlerinden (HL7 CDA) gelen XML dışa aktarmalarını BigQuery, Snowflake veya Elasticsearch'e yüklemek için JSON'a dönüştürün.
Veri Biçimlerini Öğrenmek
Veri değişimini araştıran öğrenciler, öğelerin, özniteliklerin ve iç içe geçmenin JSON anahtarlarına, nesnelerine ve dizilerine nasıl eşlendiğini görmek için XML örneklerini dönüştürücüye yapıştırabilir.

XML'den JSON'a Eşleme Başvurusu

XML ve JSON farklı veri modellerine sahiptir. Aşağıdaki tablo, her XML yapısının en yaygın kurala göre (öznitelikler için @, özniteliklerle birlikte metin için #text) JSON karşılığına nasıl eşlendiğini gösterir. Karma içerik ve yorumlar gibi bazı yapıların standart JSON temsili yoktur.

XML YapısıXML ÖrneğiJSON Karşılığı
Element<name>text</name>"name": "text"
Nested elements<a><b>1</b></a>"a": { "b": "1" }
Attributes<el attr="v"/>"el": { "@attr": "v" }
Text + attributes<el a="1">text</el>"el": { "@a": "1", "#text": "text" }
Repeated elements<r><i>1</i><i>2</i></r>"r": { "i": ["1", "2"] }
Mixed content<p>A <b>B</b> C</p>Varies by convention
CDATA<![CDATA[raw]]>"#cdata": "raw" or flattened
Namespacesxmlns:prefix="uri"Prefix preserved or stripped
Empty element<el/>"el": null or ""
Comments<!-- note -->Discarded (no JSON equivalent)

XML'den JSON'a Kural Setleri Karşılaştırması

XML'in JSON'a nasıl eşleneceğini yöneten tek bir standart yoktur. Öznitelik işleme, dizi algılama ve metin koruma açısından farklı dengeler sunan üç kural seti yaygın olarak kullanılmaktadır.

BadgerFish
Her metin düğümü $ anahtarına yerleştirilir. Öznitelikler @ önekli anahtarlar alır. Ad alanları @xmlns girişleri olarak korunur. Ayrıntılı ama kayıpsızdır: veri kaybetmeden XML'e geri dönüşüm yapabilirsiniz.
Parker
Öznitelikleri tamamen kaldırır ve yalnızca metin içeren öğeleri düz değerlere dönüştürür. Tekrarlayan öğeler dizi olur. Kompakt ve temizdir; ancak öznitelikler ve ad alanı bilgisi silineceğinden yıkıcıdır.
GData (Google Data)
Metin içeriği için $t kullanır ve öznitelikleri ön ek olmadan üst düzey anahtarlar olarak korur. BadgerFish'in ayrıntılılığı ile Parker'ın sadeliği arasında bir orta yoldur. Tarihsel olarak Google API'lerinde kullanılmıştır.

Kod Örnekleri

Aşağıda JavaScript, Python, Go ve komut satırında XML'yi JSON'a dönüştürmek için çalışan örnekler yer almaktadır. Her örnek, iç içe öğeleri ve tekrarlayan kardeş etiketleri işler.

JavaScript (browser)
// Using the DOMParser API to walk XML and build a JSON object
function xmlToJson(xml) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xml, 'application/xml')

  function nodeToObj(node) {
    const obj = {}
    // Handle attributes
    if (node.attributes) {
      for (const attr of node.attributes) {
        obj['@' + attr.name] = attr.value
      }
    }
    // Handle child nodes
    for (const child of node.childNodes) {
      if (child.nodeType === 3) { // text
        const text = child.textContent.trim()
        if (text) obj['#text'] = text
      } else if (child.nodeType === 1) { // element
        const key = child.nodeName
        const val = nodeToObj(child)
        if (obj[key]) {
          if (!Array.isArray(obj[key])) obj[key] = [obj[key]]
          obj[key].push(val)
        } else {
          obj[key] = val
        }
      }
    }
    // Simplify text-only nodes
    const keys = Object.keys(obj)
    if (keys.length === 1 && keys[0] === '#text') return obj['#text']
    return obj
  }

  return nodeToObj(doc.documentElement)
}

const xml = '<user><name>Alice</name><role>admin</role></user>'
console.log(JSON.stringify(xmlToJson(xml), null, 2))
// → { "name": "Alice", "role": "admin" }
Python
import xmltodict
import json

xml = """
<user>
  <name>Alice</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>
"""

# xmltodict converts XML to an OrderedDict
result = xmltodict.parse(xml)
print(json.dumps(result, indent=2))
# → {
# →   "user": {
# →     "name": "Alice",
# →     "roles": { "role": ["admin", "editor"] }
# →   }
# → }

# With the standard library (xml.etree.ElementTree)
import xml.etree.ElementTree as ET

def etree_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"@{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        child_data = etree_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(child_data)
        else:
            d[child.tag] = child_data
    if elem.text and elem.text.strip():
        if d:
            d["#text"] = elem.text.strip()
        else:
            return elem.text.strip()
    return d

root = ET.fromstring(xml)
print(json.dumps(etree_to_dict(root), indent=2))
Go
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "strings"
)

// For simple, known schemas — define a struct
type User struct {
    XMLName xml.Name `xml:"user"`
    Name    string   `xml:"name"`
    Roles   []string `xml:"roles>role"`
}

func main() {
    data := `<user><name>Alice</name><roles><role>admin</role><role>editor</role></roles></user>`
    var user User
    xml.NewDecoder(strings.NewReader(data)).Decode(&user)

    out, _ := json.MarshalIndent(user, "", "  ")
    fmt.Println(string(out))
    // → { "Name": "Alice", "Roles": ["admin", "editor"] }
}
CLI (xmllint + jq / yq)
# Using xq (part of yq, a jq wrapper for XML)
# Install: pip install yq  OR  brew install yq
echo '<user><name>Alice</name></user>' | xq .
# → { "user": { "name": "Alice" } }

# Using xmlstarlet + jq
xmlstarlet sel -t -v '//name' input.xml | jq -R '{ name: . }'

# Node.js one-liner with xml2js
echo '<a><b>1</b></a>' | node -e "
  const {parseString} = require('xml2js');
  let d=''; process.stdin.on('data',c=>d+=c);
  process.stdin.on('end',()=>parseString(d,(e,r)=>console.log(JSON.stringify(r,null,2))))
"

Sıkça Sorulan Sorular

XML'den JSON'a dönüşüm kayıpsız mıdır?
Her zaman değil. XML özniteliklerinin, yorumların, işleme talimatlarının ve ad alanı bildirimlerinin doğrudan JSON karşılığı yoktur. Çoğu dönüştürücü öznitelikleri @ öneki kuralıyla korur; ancak yorumlar ve işleme talimatları atılır. Tam olarak geri dönüştürülebilir bir döngüye ihtiyaç duyuyorsanız BadgerFish gibi kayıpsız bir kural seti kullanın.
XML öznitelikleri JSON'da nasıl temsil edilir?
xmlToJsonContent.a2
Dönüştürücü tekrarlayan XML öğelerini nasıl işler?
Aynı üst öğe altında bir öğe birden fazla kez göründüğünde dönüştürücü bunları JSON dizisine gruplandırır. Örneğin iki item kardeş öğesi {"item": ["a", "b"]} biçimine dönüşür. Tekil item öğesi, zorunlu dizi modu etkin değilse düz dize değeri olarak kalır.
JSON'ı tekrar XML'e dönüştürebilir miyim?
Evet; ancak sonuç, özgün dönüşümde kullanılan kurala bağlıdır. Öznitelikler @ önekleriyle korunmuşsa JSON'dan XML'e dönüştürücü bunları yeniden oluşturabilir. Özgün dönüşüm öznitelikleri düşüren Parker kuralını kullandıysa bu bilgi artık mevcut değildir. ToolDeck'te ters yön için JSON'dan XML'e dönüştürücü aracı da bulunmaktadır.
Dönüşüm sırasında XML ad alanlarına ne olur?
Ad alanı işleme kütüphaneye göre değişir. Bazı dönüştürücüler öneki anahtar adında korur (örn. "ns:element"), bazıları xmlns bildirimlerini ayrı alanlara eşler, bazıları ise ad alanlarını tamamen siler. Belirli XML'nizin ad alanı davranışını doğrulamak için çıktıyı kontrol edin.
XML'den JSON'a dönüşüm için bir standart var mıdır?
Resmi bir W3C veya IETF standardı yoktur. En yakın başvurular BadgerFish kuralı, Parker kuralı ve OASIS XSLT'den JSON'a eşleme belgesidir. Pratikte her kütüphane kendi kurallarını uygular; bu nedenle aynı XML farklı araçlarda biraz farklı JSON üretebilir.
Büyük XML dosyalarını nasıl işlerim?
Tarayıcı tabanlı dönüştürücüler birkaç megabayta kadar dosyalar için iyi çalışır. Daha büyük dosyalar (10 MB ve üzeri) için Python'un iterparse yöntemi (xml.etree.ElementTree) veya Node.js'in xml-stream kütüphanesi gibi akış tabanlı bir ayrıştırıcı kullanın. Bu yöntemler, belgenin tamamını belleğe yüklemeden belgeyi aşamalı olarak işler.