Konverter XML ke JSON

Tempel XML di kiri, dapatkan JSON di kanan. Atribut dipertahankan dengan awalan @_. Berjalan di browser Anda — tanpa unggah.

  1. Tempel XML ke area teks kiri.
  2. Klik "Konversi ke JSON". Sarang elemen menjadi objek bersarang.
  3. Salin JSON, atau unduh sebagai data.json.
  4. Elemen anak yang berulang otomatis dilipat menjadi array.
Apa fungsinya?

Mem-parse XML menjadi objek JSON menggunakan konvensi fast-xml-parser: elemen anak menjadi properti objek, anak yang berulang menjadi array, atribut dipertahankan dengan prefiks `@_` pada objek induk, dan konten teks dari node campuran masuk ke kunci `#text`. Nilai atribut numerik dan boolean otomatis diketik via `parseAttributeValue: true` — XML `count="42"` round-trip sebagai `"@_count": 42`, bukan string `"42"`.

Contoh

Input XML:

<root version="1">
  <name>Ada</name>
  <tags>math</tags>
  <tags>logic</tags>
</root>

Output JSON:

{
  "root": {
    "@_version": 1,
    "name": "Ada",
    "tags": ["math", "logic"]
  }
}

Jebakan XML umum dan cara menanganinya

XML punya kasus pojok yang tidak ada di JSON. Pola-pola ini menghasilkan output mengejutkan.

  • Anak tunggal vs. anak berganda. `<a><b/></a>` menghasilkan `{"a":{"b":""}}` (anak tunggal sebagai properti objek), tetapi `<a><b/><b/></a>` menghasilkan `{"a":{"b":["",""]}}` (banyak sebagai array). Jika kode hilir Anda selalu mengharapkan array, normalkan setelah konversi.
  • Atribut vs. elemen anak. Atribut muncul dengan prefiks `@_` di level yang sama dengan anak. `<user id="1"><name>Ada</name></user>` menjadi `{"user":{"@_id":1,"name":"Ada"}}`. Beberapa tool menggabungkan atribut ke properti — itu konvensi berbeda dari yang dipakai di sini.
  • Konten campuran (teks + elemen anak). `<p>Hello <b>world</b></p>` menghasilkan `{"p":{"#text":"Hello ","b":"world"}}`. Teks tertangkap tetapi posisinya relatif terhadap anak hilang — JSON tidak punya cara merepresentasikan konten campuran terurut. Sebagian besar XML gaya konfig tidak terkena kasus ini.
  • Namespace. Namespace (`<x:foo xmlns:x="...">`) dipertahankan sebagai bagian dari nama elemen (`x:foo`). Banyak konsumen XML menghapus prefiks; jika Anda butuh, lakukan sebagai langkah pasca-pemrosesan.
  • Bagian CDATA. `<![CDATA[some text]]>` di-parse sebagai teks polos dan bergabung dengan `#text` induknya. Pembungkus CDATA hilang — baik untuk sebagian besar kasus tetapi patut dicatat jika pembungkus bermakna semantik.
  • Self-closing vs. kosong. `<x/>` dan `<x></x>` setara di XML dan menghasilkan output JSON yang sama (`""` untuk nilai). Pembungkus asli tidak dapat dipulihkan dari JSON.
Pertanyaan yang sering diajukan

Mengapa output saya punya prefiks `@_` pada atribut?

Itu membedakan atribut XML dari elemen anak. Tanpa prefiks, `<user id="1"><id>foo</id></user>` akan punya dua kunci `id` — objek JSON hanya bisa punya satu. Prefiks membuat keduanya bisa round-trip. Jika Anda tidak butuh prefiks, ganti `"@_"` dengan `""` di langkah pasca-pemrosesan (dan terima risiko tabrakan).

Bisakah saya mendapatkan JSON tanpa kunci root pembungkus?

XML selalu punya satu elemen root. JSON menjaga pembungkus itu untuk round-trippability. Lepas setelah konversi jika Anda mau objek dalamnya — `result.root` alih-alih `result`.

Apakah komentar XML dipertahankan?

Tidak. JSON tidak punya sintaks komentar, dan parser dikonfigurasi untuk mengabaikan komentar XML. Jika Anda butuh memelihara komentar, Anda harus pakai representasi perantara berbeda yang mendukung mereka.

Apakah nilai atribut diketik?

Ya — `parseAttributeValue: true` diset, jadi `count="42"` menjadi `"@_count": 42` (angka) dan `enabled="true"` menjadi `"@_enabled": true` (boolean). Jika Anda butuh atribut sebagai string, pasca-proses atau fork konfigurasinya.

Apakah XML saya diunggah?

Tidak. Semua berjalan di browser Anda — XML Anda di-parse oleh JavaScript di halaman ini dan tidak pernah dikirim ke server. Verifikasi di alat developer browser.

Bisakah ia menangani file XML sangat besar?

Hingga sekitar 30 MB sebelum textarea melambat. Parser menskala secara linear. Untuk input lebih besar, jalankan fast-xml-parser di command line — pustaka yang sama.