Langsung ke konten utama
PulsarKit

Ubah XML ke JSON

Ubah XML menjadi JSON. Atribut, CDATA, dan namespace ditangani sesuai pilihan Anda, dan setiap kesalahan sintaks menyebut baris yang tepat.

Letakkan file di sini

.xml, .rss, .svg, .xhtml, .txt · hingga 300 MB

Atribut
Pengaturan lainnya

Cara Ubah ke JSON

  1. 1

    Letakkan file XML

    Tambahkan satu file atau hingga dua puluh. Feed RSS, gambar SVG, dan halaman XHTML juga termasuk XML dan dibaca dengan cara yang sama.

  2. 2

    Pilih cara memetakan atribut dan tag berulang

    Atribut bisa diberi awalan, dikelompokkan di bawah satu kunci, atau dilewati. Tag berulang bisa selalu dijadikan array, atau hanya bila memang muncul lebih dari sekali.

  3. 3

    Ubah dan unduh JSON

    Tekan tombol dan simpan hasilnya yang sudah diberi indentasi. Beberapa file sekaligus dikembalikan dalam satu arsip ZIP.

Satu elemen atau daftar berisi satu

Bagian yang paling merepotkan dalam pemetaan XML ke JSON adalah daftar yang hanya punya satu anggota. Elemen <order> dengan tiga anak <item> jelas menjadi array. Namun dokumen yang sama dengan satu item tampak seperti objek biasa, dan kode yang menelusurinya dengan perulangan langsung rusak pada pelanggan sungguhan yang pertama. Karena itu aturan array dibuat sebagai pengaturan eksplisit, bukan heuristik tersembunyi, dan Anda bisa memaksa setiap anak menjadi array.

Angka yang bukan angka

Deteksi tipe otomatis mengubah 42 menjadi angka dan true menjadi boolean. Biasanya memang itu yang diinginkan, tetapi sesekali hasilnya bencana. Kode suku cadang 00123 tidak boleh berubah menjadi 123, dan nomor identitas pajak dua puluh digit tidak boleh dibulatkan menjadi notasi ilmiah. Karena itu nilai dengan nol di depan dan deretan digit yang lebih panjang dari lima belas karakter tetap menjadi string. Jika deteksi tipe dimatikan, setiap nilai dipertahankan persis seperti tertulis.

Deklarasi entitas ditolak

DOCTYPE yang berisi deklarasi <!ENTITY> ditolak sebelum penguraian dimulai. Sepuluh entitas bersarang, masing-masing merujuk entitas sebelumnya sepuluh kali, mengembang menjadi gigabyte teks dan membuat tab macet. Itulah serangan klasik “billion laughs”. Di sini tidak ada yang diekspansi selain lima entitas bawaan dan referensi karakter numerik, sehingga serangan itu tidak punya apa pun untuk dikembangkan.

Diurai di sini, bukan di tempat lain

Parser berjalan di browser Anda, di thread worker (proses latar belakang), dengan kode yang datang bersama halaman. XML Anda tidak pernah diunggah, jadi tidak ada salinan di server yang harus dihapus, tidak ada antrean yang harus ditunggu, dan tidak ada log yang perlu dikhawatirkan. Begitu tab ditutup, dokumen dan JSON yang dibuat darinya ikut hilang.

Pertanyaan yang sering diajukan

Di mana atribut XML ditempatkan dalam JSON?

Secara bawaan, setiap atribut menjadi kunci di objek yang sama dengan anak elemen, dengan awalan @_ agar tidak bentrok dengan tag anak yang bernama sama. Sebagai gantinya, semua atribut bisa dikumpulkan dalam satu subobjek @attributes agar isi elemen tetap rapi, atau atribut dibuang sama sekali.

Mengapa elemen yang hanya muncul sekali tidak menjadi array?

Karena tidak ada apa pun di dokumen yang menyatakan bahwa elemen itu sebuah daftar. Dengan aturan bawaan, tag menjadi array hanya bila memang muncul lebih dari sekali di bawah induk yang sama, sehingga hasilnya mencerminkan file apa adanya. Jika kode penerima butuh bentuk yang tetap, ubah pengaturan array ke “selalu”, maka anak tunggal pun menjadi array berisi satu elemen.

Apa yang terjadi pada bagian CDATA?

Secara bawaan, isi CDATA digabungkan ke teks elemen, karena CDATA hanya cara menulis kutipan, bukan jenis data tersendiri. Jika Anda perlu tahu bagian nilai mana yang ditulis dengan cara itu, misalnya untuk menulis ulang XML nanti, pilih opsi terpisah, maka isinya masuk ke kunci #cdata tersendiri.

Bisakah awalan namespace dihapus?

Bisa. Menghapus namespace mengubah dc:title menjadi title, sehingga format feed dan dokumen jauh lebih mudah diakses dari kode. Biarkan opsi ini mati jika dua namespace berbeda memakai nama lokal yang sama di satu file, karena hanya awalan itulah yang membuat kedua kunci tetap terpisah.

Mengapa muncul kesalahan tentang entitas kustom?

Karena dokumen yang mendeklarasikan entitasnya sendiri di DOCTYPE ditolak, bukan diekspansi. Hanya itu pertahanan yang andal terhadap bom ekspansi entitas, yang bisa mengubah beberapa kilobyte menjadi gigabyte memori. Hapus blok DOCTYPE, dan sisa dokumen akan diubah seperti biasa.

Apakah feed RSS dan file SVG bisa diubah?

Bisa, keduanya XML biasa. Feed RSS diubah menjadi objek berisi metadata channel dan array item, bentuk yang praktis untuk diolah. SVG diubah menjadi pohon elemennya dengan semua atribut tampilan tetap utuh, berguna untuk memeriksa atau menulis ulang gambar lewat kode.

Bagaimana jika XML punya kesalahan sintaks?

Anda mendapat baris, kolom, dan tag yang bermasalah, misalnya tag penutup yang diharapkan di baris 214, kolom 5, bukan sekadar pesan bahwa penguraian gagal. Pada file dengan puluhan ribu elemen, justru perbedaan inilah yang terpenting, karena langsung menunjukkan tempat yang harus diperiksa.

Apakah file saya diunggah ke suatu tempat?

Tidak. Decode, validasi, dan konversi semuanya berjalan secara lokal di tab browser. Tidak ada server yang terlibat di tahap mana pun, jadi setelah halaman ditutup, tidak ada salinan dokumen Anda di mana pun.

Alat terkait