Konverter XML ke JSON
Tempel XML, dapatkan JSON seketika. Mengonversi atribut ke kunci @_, menangani elemen berulang sebagai array. 100% di-browser, tidak ada upload, tanpa pendaftaran.
Opsi · 2 spasi · XML → JSON
Apa Itu Konversi XML-ke-JSON dan Bagaimana Cara Kerjanya?
XML (Extensible Markup Language) dan JSON (JavaScript Object Notation) keduanya merupakan format data terstruktur, tetapi memiliki model yang sangat berbeda: XML adalah pohon elemen dengan atribut dan konten campuran (teks yang berselang-seling dengan elemen anak); JSON adalah pohon objek, array, string, angka, boolean, dan nilai null. Mengonversi di antara keduanya memerlukan serangkaian konvensi untuk menjembatani ketidaksesuaian ini.
Alat ini menggunakan konvensi yang paling banyak diadopsi, yang sama dengan yang digunakan oleh library populer seperti fast-xml-parser (Node.js), xmltodict (Python), dan JAXB (Java):
**1. Atribut → prefiks @_.** Atribut XML tidak memiliki padanan langsung dalam JSON. Konvensinya adalah merepresentasikannya sebagai kunci berprefix @_. Jadi
**2. Konten teks elemen dengan atribut → #text.** Ketika sebuah elemen memiliki atribut dan konten teks —
**3. Elemen saudara berulang → array.** XML mengizinkan beberapa elemen anak dengan nama yang sama; objek JSON tidak dapat memiliki kunci duplikat. Solusinya adalah mengumpulkan saudara dengan nama yang sama ke dalam array. Satu elemen anak
**4. Tanpa konversi tipe — semua nilai tetap string.** XML tidak memiliki sistem tipe native untuk konten teks. Nilai "123" dalam XML adalah string. Mengonversinya ke angka JSON 123 memerlukan asumsi tentang maksud penulis — asumsi yang salah untuk kode pos ("01234" → 1234), nomor telepon, pengenal yang diisi, dan string desimal yang sensitif presisi. Alat ini mempertahankan semua nilai sebagai string. Terapkan konversi tipe dalam kode Anda sendiri untuk field di mana Anda mengetahui tipenya.
**5. Lossy untuk komentar, instruksi pemrosesan, dan namespace.** XML mendukung fitur yang tidak dimiliki JSON: komentar (), instruksi pemrosesan (), dan semantik namespace. Fitur-fitur ini dibuang atau didekati selama konversi. Untuk pekerjaan XML lossless — memformat ulang, meminifikasi, memvalidasi — gunakan XML Formatter. Untuk konversi terbalik — membangun XML dari JSON — gunakan Konverter JSON ke XML.
**Mengapa mengonversi XML ke JSON?** JSON adalah format native JavaScript dan format pertukaran default untuk REST API. Jika Anda menerima XML dari layanan SOAP lama, feed RSS, sitemap, atau sistem enterprise, mengonversinya ke JSON memungkinkan Anda bekerja dengan data menggunakan akses objek JavaScript standar, kueri JSON path, dan database atau API yang mengenal JSON. Konversi ini adalah jembatan satu arah: berguna untuk mengonsumsi data XML dalam stack modern, tetapi tidak untuk mempertahankan atau round-trip dokumen XML.
// Convert XML to JSON in Node.js using fast-xml-parser
import { XMLParser } from 'fast-xml-parser';
const xml = `<catalog>
<product id="P01">
<name>Wireless Headphones</name>
<price currency="USD">79.99</price>
</product>
</catalog>`;
const parser = new XMLParser({
ignoreAttributes: false, // preserve attributes
attributeNamePrefix: '@_', // @_ prefix for attributes
textNodeName: '#text', // #text for mixed element content
parseAttributeValue: false, // no type coercion on attributes
parseTagValue: false, // no type coercion on element text
});
const result = parser.parse(xml);
console.log(JSON.stringify(result, null, 2));
// {
// "catalog": {
// "product": {
// "@_id": "P01",
// "name": "Wireless Headphones",
// "price": {
// "@_currency": "USD",
// "#text": "79.99"
// }
// }
// }
// } Fitur Utama
Konversi Langsung
Output JSON diperbarui seketika saat Anda mengetik atau menempel XML — tidak perlu tombol Convert. Input besar (>200KB) secara otomatis beralih ke mode manual agar browser tetap responsif.
Konvensi Prefiks Atribut @_
Atribut XML menjadi kunci JSON berprefix @_, mengikuti konvensi fast-xml-parser dan xmltodict.
Deteksi Array Otomatis untuk Elemen Berulang
Elemen saudara dengan nama yang sama secara otomatis menjadi array JSON. Satu
Tanpa Konversi Tipe — Nilai Tetap String
Semua nilai XML dipertahankan sebagai string JSON. Angka nol di depan, nomor telepon, kode yang diisi, dan string yang tampak boolean seperti "true" atau "false" tidak pernah dikonversi secara diam-diam ke angka atau boolean.
Privasi 100% Berbasis Browser
Semua konversi berjalan secara lokal di browser Anda menggunakan JavaScript. XML Anda — termasuk kredensial, konfigurasi internal, dan payload sensitif — tidak pernah dikirim ke server mana pun, tidak pernah dicatat, dan tidak pernah disimpan.
Pelaporan Error Well-Formedness
Jika XML Anda tidak well-formed, alat melaporkan nomor baris dan kolom tepat dari error pertama, sehingga Anda dapat langsung menemukan dan memperbaiki masalah sebelum mengonversi.
Contoh
File Konfigurasi
<?xml version="1.0" encoding="UTF-8"?>
<appConfig version="2.1" env="production">
<database>
<host>db.example.com</host>
<port>5432</port>
<name>myapp_prod</name>
<pool max="10" min="2"/>
</database>
<cache enabled="true">
<ttl>3600</ttl>
<driver>redis</driver>
</cache>
</appConfig> Konfigurasi aplikasi kecil dengan atribut dan elemen bersarang. Atribut menjadi kunci berprefix @_ dalam output JSON: version="2.1" menjadi "@_version": "2.1" di bawah appConfig, dan atribut max dan min elemen pool menjadi "@_max": "10" dan "@_min": "2". Semua nilai — termasuk port dan ttl — tetap berupa string, bukan angka, karena konverter tidak melakukan konversi tipe.
Fragmen Sitemap
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://go-tools.org/tools/xml-to-json</loc>
<lastmod>2026-05-29</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://go-tools.org/tools/json-to-xml</loc>
<lastmod>2026-05-29</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset> Fragmen sitemap.xml dua URL. Karena ada dua elemen
Item RSS
<item> <title>XML to JSON: A Practical Guide</title> <link>https://go-tools.org/blog/xml-to-json-guide</link> <pubDate>Thu, 29 May 2026 00:00:00 GMT</pubDate> <category>Developer Tools</category> <description>Learn how XML attributes map to @_ keys, how repeated elements become arrays, and why values stay strings in any XML-to-JSON conversion.</description> <guid isPermaLink="true">https://go-tools.org/blog/xml-to-json-guide</guid> </item>
Elemen item RSS 2.0. Elemen guid memiliki atribut isPermaLink, sehingga output JSON untuk guid menjadi objek dengan "@_isPermaLink": "true" dan "#text": "https://go-tools.org/blog/xml-to-json-guide" — atribut dan konten teks elemen berdampingan sebagai kunci saudara. Semua elemen lainnya hanya memiliki konten teks dan dikonversi langsung ke nilai string.
Cara Menggunakan
- 1
Tempel XML Anda
Masukkan atau tempel XML ke kolom input di atas. Anda juga dapat klik 'Muat contoh' untuk mencoba sampel — file konfigurasi, fragmen sitemap, atau item RSS.
- 2
Lihat Output JSON Langsung
JSON muncul seketika di panel output. Atribut menjadi kunci berprefix @_, konten teks elemen campuran menjadi #text, dan elemen saudara berulang menjadi array. Sesuaikan indent (2 atau 4 spasi) sesuai kebutuhan.
- 3
Salin atau Unduh
Klik Copy untuk mengambil JSON ke clipboard, atau Download untuk menyimpannya sebagai file .json yang siap untuk aplikasi, API, atau pipeline data Anda.
Jebakan Konversi Umum
Lupa Bahwa Nilai Tetap Berupa String
Konverter tidak melakukan konversi tipe. Jika kode hilir Anda mengharapkan angka JSON tetapi XML berisi string numerik, Anda harus mengonversinya secara eksplisit setelah mengonversi. Mengandalkan konversi string-ke-angka implisit (operator == atau aritmatika JavaScript) rawan error — selalu gunakan parseInt(), parseFloat(), atau Number() secara sengaja.
// XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" } ← string, not number
// Dangerous: comparing as-is
if (config.timeout > 25) { ... } // "30" > 25 coerces, but fragile // XML: <timeout>30</timeout>
// JSON output: { "timeout": "30" }
// Safe: explicit coercion where you know the type
if (parseInt(config.timeout, 10) > 25) { ... } Ketidaksesuaian Bentuk Item Tunggal vs. Array
Ketika hanya ada satu elemen
// XML with one item: <root><item>a</item></root>
// JSON: { "root": { "item": "a" } } ← string, not array
result.root.item.forEach(i => console.log(i)); // TypeError: not a function // Normalize to array regardless of count const items = [].concat(result.root?.item ?? []); items.forEach(i => console.log(i)); // safe for 0, 1, or many
Konten Campuran: Teks dan Kunci #text
Ketika sebuah elemen memiliki atribut dan konten teks, teks berada di bawah #text. Mengakses nilai teks seolah-olah itu adalah string biasa akan mengembalikan objek. Selalu periksa apakah nilai elemen adalah string atau objek dengan kunci #text ketika atribut mungkin ada.
// XML: <price currency="USD">29.99</price>
// JSON: { "price": { "@_currency": "USD", "#text": "29.99" } }
const amount = result.price; // { "@_currency": "USD", "#text": "29.99" }, not "29.99" // Handle both plain string and @_/#text object const raw = result.price; const amount = typeof raw === 'object' ? raw['#text'] : raw; // "29.99"
Input XML yang Tidak Well-Formed
Konverter memerlukan XML yang well-formed. Penyebab umum error well-formedness: & yang tidak di-escape dalam konten teks (gunakan &), tag yang tidak cocok (
<!-- Unescaped & — well-formedness error --> <query>name = 'Alice' & role = 'admin'</query>
<!-- Escaped & — valid XML --> <query>name = 'Alice' & role = 'admin'</query>
Nilai Berawalan Nol yang Rusak karena Konversi
Alat ini mempertahankan angka nol di depan karena tidak melakukan konversi tipe. Jika Anda memproses JSON dengan library yang melakukan konversi (beberapa validator skema JSON, mapper ORM), angka nol di depan mungkin hilang. Selalu deklarasikan tipe field secara eksplisit sebagai string dalam skema Anda.
// XML: <zipCode>01234</zipCode>
// This tool outputs: { "zipCode": "01234" } ← correct
// But if a downstream schema coerces:
// { zipCode: z.number() } → 1234 ← leading zero lost // Declare ZIP codes and other padded identifiers as strings
// { zipCode: z.string() } → "01234" ← correct Kasus Penggunaan Umum
- Mengonsumsi API SOAP / XML Lama
- Layanan enterprise lama (perbankan, asuransi, logistik) sering mengekspos API SOAP yang mengembalikan XML. Konversi respons ke JSON untuk bekerja dengan data menggunakan tooling JavaScript modern, menyimpannya di database dokumen, atau meneruskannya ke konsumen REST API.
- Memproses Feed RSS dan Atom
- Feed RSS 2.0 dan Atom 1.0 adalah XML. Konversi XML feed ke JSON untuk mengekstrak judul, tautan, tanggal publikasi, dan deskripsi untuk agregator feed, pipeline konten, dan sistem notifikasi tanpa ketergantungan library parsing XML.
- Parsing File Sitemap
- File sitemap.xml mencantumkan URL situs dengan metadata. Konversi sitemap ke JSON untuk menganalisis cakupan URL, membangun antrean crawl, membandingkan sitemap di berbagai lingkungan, atau memasukkan URL ke pemeriksa tautan atau alat audit SEO.
- Transformasi File Konfigurasi
- Banyak sistem enterprise (Spring, Maven, Ant, JBoss, Tomcat) menggunakan file konfigurasi XML. Konversi ke JSON untuk analisis, scripting migrasi, pembuatan dokumentasi, atau impor ke alat yang natively berbicara JSON.
- Pengembangan Mobile dan Android
- Resource Android, file layout, dan AndroidManifest.xml semuanya adalah XML. Konversi ke JSON untuk skrip analisis, audit otomatis, atau menghasilkan dokumentasi tentang izin yang dideklarasikan, aktivitas, dan nilai resource.
- Migrasi Data dan ETL
- Ekspor data dari sistem enterprise (ERP, CRM, penggajian) sering tiba sebagai XML. Konversi ke JSON sebagai langkah pertama dalam pipeline ETL untuk memuat data ke penyimpan data native JSON seperti MongoDB, Firestore, atau REST API.
Detail Teknis
- Browser DOMParser untuk Parsing XML
- Input XML di-parse menggunakan DOMParser bawaan browser dengan tipe MIME 'text/xml' — mesin yang sama yang digunakan untuk merender SVG dan XHTML. Sepenuhnya sesuai XML 1.0 dan melaporkan error well-formedness dengan informasi baris dan kolom. Pendekatan ini menangani namespace, bagian CDATA, instruksi pemrosesan, dan referensi entitas dengan benar tanpa ketergantungan pihak ketiga.
- Serialisasi DOM-ke-JSON Rekursif
- Setelah di-parse, alat menelusuri pohon DOM secara rekursif. Node elemen menjadi objek JSON; atributnya menjadi kunci berprefix @_; elemen hanya-teks menjadi nilai string biasa; elemen dengan atribut dan konten teks mendapat kunci #text untuk konten teks. Elemen saudara dengan nama yang sama dikumpulkan dan dikeluarkan sebagai array JSON. Node teks hanya-spasi di antara elemen dibuang.
- Tanpa Konversi Tipe — Pemeliharaan String
- Semua nilai atribut dan konten teks ditulis ke output JSON sebagai string. Tidak ada parseInt, parseFloat, atau parsing boolean yang diterapkan. Ini adalah pilihan desain yang disengaja untuk mencegah kerusakan data diam-diam untuk nilai berawalan nol, desimal yang sensitif presisi, dan string yang tampak boolean. Konversi tipe, jika diperlukan, harus diterapkan secara eksplisit dalam kode hilir.
- 100% Berbasis Browser — Tanpa Upload, Tanpa Server
- Semua pemrosesan berjalan di JavaScript engine browser Anda. Tidak ada data yang ditransmisikan melalui jaringan kapan pun. Input yang lebih besar dari 200KB secara otomatis beralih dari mode langsung ke mode manual (memerlukan klik Convert eksplisit) untuk menjaga browser tetap responsif dan mencegah pemblokiran thread utama selama traversal DOM yang berat.
Praktik Terbaik
- Validasi Well-Formedness XML Terlebih Dahulu
- Jika sumber XML Anda ditulis tangan atau dihasilkan oleh sistem yang kadang menghasilkan output tidak valid, validasikan sebelum mengonversi. Gunakan tombol Validate di XML Formatter untuk mengonfirmasi XML well-formed dan mendapatkan lokasi error yang tepat untuk setiap masalah.
- Normalisasi Field Satu-atau-Banyak ke Array
- Ketika skema XML Anda mengizinkan satu atau banyak elemen anak dengan nama yang sama, output JSON akan berupa objek untuk satu elemen dan array untuk banyak. Selalu normalisasi field ini dalam kode konsumen Anda: const items = [].concat(result.items ?? []) — ini aman untuk nol, satu, atau banyak dan mencegah TypeError.
- Terapkan Konversi Tipe Secara Eksplisit dan Selektif
- Karena alat ini mempertahankan semua nilai sebagai string, terapkan konversi tipe secara sengaja dalam kode Anda untuk field spesifik yang memerlukannya. Menggunakan parseInt(val, 10) untuk field bilangan bulat yang diketahui adalah aman. Menerapkan konversi secara luas dengan Number(val) berisiko merusak nilai berawalan nol, string kosong, dan desimal yang sensitif presisi.
- Periksa #text Saat Mengakses Nilai Elemen
- Jika sebuah elemen dapat memiliki atribut dalam beberapa payload dan tidak dalam payload lain, nilai JSON-nya akan berupa string biasa (tanpa atribut) atau objek dengan kunci @_ dan kunci #text (dengan atribut). Tulis accessor yang tangguh: const val = typeof node === 'object' ? node['#text'] : node. Pola ini menangani kedua bentuk dan menghindari nilai undefined yang diam-diam.
- Untuk Pekerjaan XML Lossless, Gunakan XML Formatter
- Konversi XML-ke-JSON membuang komentar, instruksi pemrosesan, dan semantik namespace. Jika Anda perlu mempertahankan semua konten XML dengan tepat, gunakan XML Formatter untuk beautify, minify, dan validasi tanpa kehilangan apa pun. Konversi ke JSON hanya ketika Anda perlu bekerja dengan data dalam konteks native JSON.
Pertanyaan yang Sering Diajukan
Apakah data XML saya dikirim ke server saat menggunakan alat ini?
Bagaimana atribut XML dipetakan dalam output JSON?
Apakah konverter melakukan konversi angka atau boolean?
Bagaimana elemen berulang (saudara dengan nama yang sama) ditangani?
Apakah konversi XML-ke-JSON bersifat lossless?
Bagaimana cara mengonversi JSON kembali ke XML?
Apa yang terjadi dengan namespace XML?
Mengapa 0123 menjadi "0123" dan bukan 123?
Apa perbedaan antara alat ini dan XML formatter?
Apakah ada batas ukuran file?
Apakah konverter menangani bagian CDATA?
Bisakah saya mengonversi XML dengan beberapa elemen root?
Alat Terkait
Lihat semua alat →Decode & Encode Base64 Online — Konversi Instan di Browser
Encoding & Pemformatan
Decode dan encode Base64 online gratis. Konversi real-time dengan dukungan UTF-8 dan emoji. 100% privat di browser Anda. Tanpa pendaftaran.
Konverter CSV ke JSON
Encoding & Pemformatan
Konversi CSV ke JSON di browser. RFC 4180, infer tipe, baris header, aman big-int. 100% privat, tanpa unggah.
JSON Diff (Bandingkan)
Encoding & Pemformatan
Bandingkan dua file JSON langsung di browser Anda. Sorotan side-by-side, output RFC 6902 JSON Patch, abaikan field seperti timestamp dan ID. 100% privat, tanpa upload.
Format & Validasi JSON Online — Gratis, Cepat, Privat
Encoding & Pemformatan
Format, validasi, dan rapikan JSON langsung di browser Anda. Alat online gratis dengan deteksi error, minifikasi, dan salin sekali klik. 100% privat.
Validator JSON Schema
Encoding & Pemformatan
Validasi JSON terhadap JSON Schema apa pun secara instan di browser Anda. Mendukung Draft 2020-12, 2019-09, dan Draft-07 dengan pesan error berbasis path yang presisi. 100% privat — tanpa upload, tanpa akun, gratis.
Konverter JSON ke CSV
Encoding & Pemformatan
Konversi JSON ke CSV di browser. Preset RFC 4180, Excel-EU, TSV, Pipe. Flatten objek bertingkat atau Stringify. 100% privat, tanpa unggah.