XML to JSON

Konversi XML ke format JSON

Coba contoh

Input XML

Output JSON

Berjalan lokal · Aman untuk menempel rahasia
JSON akan muncul di sini…

Apa itu Konversi XML ke JSON?

Konversi XML ke JSON adalah proses mengubah data dari Extensible Markup Language (XML) menjadi JavaScript Object Notation (JSON). Kedua format tersebut merepresentasikan data terstruktur dan hierarkis, tetapi menggunakan sintaks dan model data yang berbeda. XML menggunakan tag pembuka dan penutup dengan atribut opsional, sedangkan JSON menggunakan pasangan key-value, larik, dan tipe primitif. Mengonversi XML ke JSON memungkinkan Anda bekerja dengan data XML di lingkungan di mana JSON adalah format aslinya, seperti runtime JavaScript, REST API, dan database NoSQL.

Konversi tidak selalu bersifat satu-ke-satu. XML memiliki konstruksi yang tidak memiliki padanan langsung dalam JSON: atribut, konten campuran (teks yang diselingi dengan elemen anak), instruksi pemrosesan, komentar, bagian CDATA, dan deklarasi namespace. Berbagai pustaka konversi menangani konstruksi ini secara berbeda, itulah mengapa ada beberapa konvensi yang berbeda. Pendekatan paling umum memberi prefiks nama atribut dengan @ dan menempatkan konten teks di field #text ketika atribut ada pada elemen yang sama.

Konversi XML ke JSON adalah langkah umum saat bermigrasi dari SOAP ke REST, mengonsumsi API enterprise lama, atau memproses feed data pemerintah dan keuangan yang mewajibkan XML. Alih-alih menulis ulang produsen dan konsumen secara bersamaan, tim mengonversi payload XML di lapisan batas dan meneruskan JSON ke hilir. AWS API Gateway, Apache Camel, dan MuleSoft semuanya mendukung pola ini secara native.

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"
      }
    ]
  }
}

Mengapa Menggunakan Konverter XML ke JSON Online?

Menulis skrip konversi sekali pakai membutuhkan waktu, terutama ketika XML mengandung atribut, namespace, atau elemen berulang yang perlu menjadi larik JSON. Konverter berbasis browser memberikan output JSON dalam hitungan detik sehingga Anda dapat memeriksa strukturnya dan langsung melanjutkan.

Konversi instan
Tempel XML dan dapatkan output JSON segera. Tidak perlu menginstal pustaka, menulis skrip, atau mengonfigurasi alat build.
🔒
Pemrosesan mengutamakan privasi
Seluruh konversi berjalan di browser Anda menggunakan JavaScript. Data XML Anda tidak pernah meninggalkan perangkat Anda dan tidak pernah diunggah ke server mana pun.
🔀
Menangani atribut dan larik
Atribut dipetakan ke kunci berawalan @. Elemen saudara yang berulang dikelompokkan ke dalam larik JSON secara otomatis, mengikuti konvensi Parker atau BadgerFish.
📋
Tidak perlu akun
Buka halaman, tempel XML Anda, dan salin hasilnya. Tidak ada pendaftaran, tidak ada API key, tidak ada batasan penggunaan.

Kasus Penggunaan XML ke JSON

Pengembangan frontend
Konversi respons XML API menjadi JSON agar Anda dapat merender data di komponen React, Vue, atau Angular tanpa menambahkan pustaka pengurai XML ke bundel klien.
Rekayasa backend
Ubah payload SOAP, feed RSS/Atom, atau respons XML-RPC menjadi JSON di lapisan API gateway sebelum meneruskan data ke layanan mikro yang mengharapkan input JSON.
DevOps dan CI/CD
Konversi laporan pengujian XML (JUnit, NUnit, xUnit) menjadi JSON untuk dikonsumsi oleh dashboard, bot Slack, atau pipeline notifikasi CI kustom.
QA dan pengujian
Bandingkan snapshot JSON yang telah dikonversi dengan output yang diharapkan untuk memverifikasi bahwa layanan penghasil XML tidak mengubah struktur responsnya antar rilis.
Rekayasa data
Konversi ekspor XML dari portal pemerintah, feed keuangan (FIX, FIXML), atau sistem kesehatan (HL7 CDA) menjadi JSON untuk dimuat ke BigQuery, Snowflake, atau Elasticsearch.
Belajar format data
Mahasiswa yang mempelajari pertukaran data dapat menempel contoh XML ke dalam konverter untuk melihat secara tepat bagaimana elemen, atribut, dan nesting dipetakan ke kunci, objek, dan larik JSON.

Referensi Pemetaan XML ke JSON

XML dan JSON memiliki model data yang berbeda. Tabel di bawah menunjukkan bagaimana setiap konstruksi XML dipetakan ke padanan JSON-nya di bawah konvensi paling umum (@ untuk atribut, #text untuk teks yang berdampingan dengan atribut). Beberapa konstruksi, seperti konten campuran dan komentar, tidak memiliki representasi JSON yang standar.

Konstruksi XMLContoh XMLPadanan JSON
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)

Perbandingan Konvensi XML ke JSON

Tidak ada standar tunggal yang mengatur cara XML dipetakan ke JSON. Tiga konvensi banyak digunakan, masing-masing dengan pertimbangan berbeda untuk penanganan atribut, deteksi larik, dan pelestarian teks.

BadgerFish
Setiap simpul teks masuk ke kunci $. Atribut mendapatkan kunci berawalan @. Namespace dipertahankan sebagai entri @xmlns. Verbose tetapi lossless: Anda dapat melakukan round-trip kembali ke XML tanpa kehilangan data.
Parker
Menghapus atribut sepenuhnya dan mengonversi elemen yang hanya berisi teks menjadi nilai langsung. Elemen berulang menjadi larik. Ringkas dan bersih, tetapi destruktif: atribut dan informasi namespace dibuang.
GData (Google Data)
Menggunakan $t untuk konten teks dan mempertahankan atribut sebagai kunci tingkat atas tanpa prefiks. Jalan tengah antara verbositas BadgerFish dan kesederhanaan Parker. Digunakan secara historis dalam Google API.

Contoh Kode

Berikut adalah contoh yang dapat digunakan untuk mengonversi XML ke JSON dalam JavaScript, Python, Go, dan baris perintah. Setiap contoh menangani elemen bersarang dan tag saudara yang berulang.

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))))
"

Pertanyaan yang Sering Diajukan

Apakah konversi XML ke JSON bersifat lossless?
Tidak selalu. Atribut XML, komentar, instruksi pemrosesan, dan deklarasi namespace tidak memiliki padanan langsung dalam JSON. Sebagian besar konverter mempertahankan atribut menggunakan konvensi prefiks @, tetapi komentar dan instruksi pemrosesan dibuang. Jika Anda memerlukan round-trip yang sepenuhnya reversibel, gunakan konvensi lossless seperti BadgerFish.
Bagaimana atribut XML direpresentasikan dalam JSON?
xmlToJsonContent.a2
Bagaimana konverter menangani elemen XML yang berulang?
Ketika sebuah elemen muncul lebih dari sekali di bawah induk yang sama, konverter mengelompokkannya ke dalam larik JSON. Misalnya, dua saudara item menjadi {"item": ["a", "b"]}. Elemen item tunggal tetap sebagai nilai string biasa kecuali mode force-array diaktifkan.
Bisakah saya mengonversi JSON kembali ke XML?
Ya, tetapi hasilnya bergantung pada konvensi yang digunakan selama konversi asli. Jika atribut dipertahankan dengan prefiks @, konverter JSON ke XML dapat merekonstruksinya. Jika konversi asli menggunakan Parker (yang membuang atribut), informasi tersebut telah hilang. ToolDeck juga memiliki alat JSON ke XML untuk arah sebaliknya.
Apa yang terjadi pada namespace XML selama konversi?
Penanganan namespace bervariasi antar pustaka. Beberapa konverter mempertahankan prefiks dalam nama kunci (misalnya, "ns:element"), yang lain memetakan deklarasi xmlns ke field terpisah, dan beberapa menghapus namespace sepenuhnya. Periksa output untuk XML spesifik Anda guna memverifikasi perilaku namespace.
Apakah ada standar untuk konversi XML ke JSON?
Tidak ada standar formal W3C atau IETF. Referensi terdekat adalah konvensi BadgerFish, konvensi Parker, dan pemetaan OASIS XSLT-to-JSON. Dalam praktiknya, setiap pustaka menerapkan aturannya sendiri, itulah mengapa XML yang sama dapat menghasilkan JSON yang sedikit berbeda pada alat yang berbeda.
Bagaimana cara menangani file XML berukuran besar?
Konverter berbasis browser bekerja baik untuk file hingga beberapa megabyte. Untuk file yang lebih besar (10MB ke atas), gunakan pengurai streaming seperti iterparse Python (xml.etree.ElementTree) atau xml-stream Node.js. Alat-alat ini memproses dokumen secara bertahap tanpa memuat seluruh pohon ke dalam memori.