Alat pengembang · Konverter sintaksis
konversi JSON ke XML: elemen root, array, dan nama tag tidak valid
· Cara kerjanya
json xml format data
JSON dapat berupa array kosong dengan kunci yang dimulai dengan angka atau berisi spasi, tidak ada satupun yang diperbolehkan oleh XML. Posting ini menjelaskan keputusan yang harus diambil konverter tentang akar, array, dan nama, sehingga Anda dapat memprediksi hasilnya.
Larik tanpa nama — larik JSON tingkat atas yang harus menjadi dokumen XML berakar tunggal, dan elemen pembungkus yang muncul
JSON dapat dimulai dengan `[1,2]`; XML tidak dapat dimulai dengan dua elemen dokumen sejenis. Oleh karena itu, ToolAcre menggabungkan array root dengan nama root yang dipilih dan menulis setiap anggota sebagai anak `<item>` yang berulang. Nama peringatan itu konvensi, karena nama pembungkus dan item tidak ada di sumbernya.
Memilih `numbers` menghasilkan satu elemen dokumen `<numbers>` yang berisi dua elemen item. Konversinya bersifat deterministik, namun tidak kanonik: sistem lain mungkin memerlukan `<number>` atau koleksi yang memiliki atribut. Tetapkan root dengan sengaja dan bandingkan hasilnya dengan kontrak XML yang disyaratkan penerima.
XML membutuhkan tepat satu root — mengapa setiap konversi menciptakan atau meminta nama elemen root
Dokumen XML harus memiliki tepat satu elemen root. Objek JSON dengan tepat satu kunci tingkat atas biasa dapat menggunakan kunci tersebut secara langsung. Objek multi-kunci, larik, skalar, atau null tidak memiliki satu pun nama yang diberikan, sehingga penulis menyertakannya dalam `root` kecuali pengguna memberikan nama resmi lainnya.
Aturan wrapper diterapkan sebelum serialisasi dan muncul sebagai peringatan. Itu tidak ditemukan oleh skema dan tidak mengklaim bahwa `<root>` memiliki arti bagi layanan lama. Memberi nama pada envelope adalah bagian dari desain integrasi, sedangkan konverter hanya menjamin struktur yang terbentuk dengan baik di bawah pemetaannya sendiri.
Array tidak memiliki padanan XML — mengulangi elemen per item, dan bagaimana array dari skalar dan array dari array direpresentasikan
Array menjadi elemen berulang. Di akar dokumen, anggota menggunakan `<item>` di bawah pembungkus. Di dalam suatu objek, array yang disimpan di bawah `line` menjadi `<line>` saudara yang berulang. Array objek membuat elemen berulang dengan bidang anak; array bersarang tidak memiliki nama domain dan mewarisi struktur generik yang dihasilkan oleh pembuatnya.
Ini menghilangkan perbedaan antara satu anggota array dan skalar dengan nama elemen yang sama setelah pembacaan XML-to-JSON nanti. XML menyediakan kejadian, bukan penanda array independen. Jika kardinalitas stabil penting, skema atau pemetaan aplikasi harus menyediakannya; serializer generik tidak dapat membuktikannya hanya dari nama elemen berbentuk JSON.
Kunci yang tidak boleh berupa nama elemen — nama yang dimulai dengan angka, berisi spasi atau tanda baca, atau dimulai dengan 'xml', dan cara konverter mengganti nama atau menghindarinya
Garis besarnya menyarankan konverter dapat mengganti nama atau menghindari kunci ilegal. ToolAcre secara eksplisit menolaknya. Kunci dengan spasi, yang diawali dengan angka atau tanda hubung, atau yang diawali dengan huruf khusus `xml` memicu `UNSUPPORTED_SHAPE` dan memberi nama jalur yang menyinggung. Penggantian nama secara diam-diam akan menghasilkan XML yang tidak cocok dengan skema yang disepakati.
Nama yang valid dapat dimulai dengan huruf, garis bawah, atau awalan bergaya namespace dan dapat berisi angka, titik, garis bawah, titik dua, dan tanda hubung setelah awalan. Kunci atribut hanya menggunakan `@` sebagai konvensi JSON; nama atribut yang tersisa harus melewati pemeriksaan yang sama. Ganti nama kunci sumber dengan sengaja atau pilih format target lain.
Kunci yang tidak dapat berupa nama elemen akan ditolak, tidak pernah diganti namanya atau di-escape
Angka dan boolean diserialkan sebagai teks elemen, sehingga tipe JSON tidak lagi dideklarasikan oleh XML. Akibatnya, pembaca terbalik default mengembalikan string. Null tidak memiliki representasi XML di sini: ia menjadi elemen kosong, tidak dapat dibedakan dari string kosong, dan penulis melaporkan berapa banyak nilai yang mengalami perubahan tersebut.
Ini berarti `{ "a": null, "b": "" }` dapat menghasilkan dua elemen kosong yang dibaca kembali sama. Menyebut perjalanan bolak-balik itu tanpa kerugian adalah salah. Atribut, `#text` dan `#cdata` mempertahankan konvensi struktural konverter, namun tidak menambahkan sistem tipe XML umum.
Tipe menjadi teks XML, sedangkan null menjadi ambiguitas elemen kosong yang diakui
Gunakan `{"order":{"@id":"A-7","customer":"Ada","line":[{"sku":"P1","qty":2},{"sku":"P2","qty":1}],"note":null}}`. Kunci `order` tunggal menjadi root, `@id` menjadi atribut, setiap objek baris menjadi `<line>` berulang, dan null menjadi `<note></note>` kosong dengan peringatan.
Baca kembali hasilnya dengan inferensi dinonaktifkan. Id atribut, kuantitas dan nilai teks adalah string, dan garis adalah array karena muncul dua kali. Ini menunjukkan kebalikan yang didukung secara tepat sambil mengekspos tipe null dan numerik yang hilang. Skema pesanan penerima mungkin memerlukan nama atau pemesanan lain, yang tidak divalidasi oleh contoh ini.
Apa yang tidak tercakup di sini — menghasilkan XML yang cocok dengan XSD atau namespace tertentu, yang memerlukan pemetaan yang ditulis dengan tangan
Penulis tidak menggunakan XSD, menetapkan URI namespace, atau memutuskan urutan elemen dari skema bisnis. Ia menulis deklarasi XML dan tidak pernah mengeluarkan DOCTYPE. Kunci yang berisi awalan namespace dipertahankan secara harfiah, namun itu bukan resolusi namespace atau bukti bahwa awalan dideklarasikan dengan benar.
Menghasilkan XML yang diterima oleh layanan tertentu memerlukan atribut, batasan urutan, grup pilihan, dan nama yang memenuhi syarat. Gunakan skema atau dokumentasi saat ini untuk membuat pemetaan tersebut. Konversi umum cocok untuk inspeksi dan dokumen sederhana yang berpusat pada data, bukan pengganti serialisasi yang sadar kontrak.
Kesimpulan: prediksi bentuknya sebelum Anda bergantung padanya — dan bagaimana panel Konverter sintaksis menampilkan struktur XML yang dihasilkan dokumen JSON
Prediksi amplop, nama barang dan jenis kerugian sebelumnya tergantung pada hasilnya. ToolAcre membungkus nilai yang tidak memiliki satu root, mengulangi array, memetakan kunci `@` ke atribut, mengganti null dengan teks kosong dan menolak nama ilegal daripada menebak penggantinya. Setiap perubahan yang tidak terlihat jelas muncul di keluaran atau peringatan.
Uji objek terkecil yang mencakup array tingkat atas, catatan berulang, null, teks numerik, dan kunci yang canggung. Penolakan merupakan bukti berguna bahwa pemetaan manual diperlukan. File yang berhasil masih memerlukan validasi oleh penerima sebenarnya, karena XML yang dibuat dengan baik dan XML yang valid skema adalah klaim yang berbeda.
Setelah penerima menerima spesimen, tambahkan pemeriksaan terbalik hanya jika pemetaan diharapkan dapat bertahan. Atribut dan turunan berulang dapat melakukan perjalanan bolak-balik berdasarkan konvensi ToolAcre sendiri, sedangkan tipe null dan skalar tidak bisa. Mencatat perbedaan tersebut mencegah contoh jalur bahagia yang berhasil digeneralisasikan ke setiap dokumen pesanan yang mungkin dihasilkan oleh integrasi Anda.