Bahasa Melayu

Alat pembangun · Penukar sintaks

Empat model data dibandingkan: mengapa JSON, YAML, TOML dan XML tidak pernah memetakan 1:1

· Latar belakang

format data json yaml

Empat bentuk model data berbeza bertemu di hab penukaran terhad
Ilustrasi vektor ToolAcre asal

Setiap penukaran antara format ini adalah lossy di suatu tempat, kerana setiap satu telah direka bentuk mengikut model data yang berbeza. Siaran ini membandingkan sistem jenis dan strukturnya supaya anda boleh meramalkan perkara yang akan disimpan oleh penukaran dan perkara yang akan dijatuhkan.

Konfigurasi yang tidak akan pergi balik — fail ditukar melalui tiga format dan medan yang kembali berbeza

Objek biasa yang mengandungi nombor selamat, rentetan, boolean, tatasusunan dan objek bersarang boleh bertahan JSON-ke-YAML-ke-JSON dan JSON-ke-TOML-ke-JSON ujian. Tambah nol sebelum ini TOML, tarikh dari TOML, bercampur XML kandungan atau a YAML komen, dan beberapa nilai atau maklumat sumber berubah.

Soalan yang berguna bukanlah sama ada penukaran adalah kerugian secara universal. Ia adalah kelas input dan arah mana yang mengekalkan sifat yang anda perlukan. Amaran dan penolakan ToolAcre menjadikan matriks itu boleh diperhatikan dan bukannya mengurangkan setiap pasangan kepada satu janji pemasaran.

Konfigurasi perwakilan boleh pergi balik melalui beberapa pasangan, tetapi bukan setiap bentuk yang disokong

JSON menyediakan null, boolean, nombor, rentetan, tatasusunan dan objek dalam penghurai ini. Ia tidak mempunyai ulasan, jenis tarikh atau sintaks rujukan kongsi. JavaScript menghuraikan nombor sebagai IEEE-754 berganda, jadi integer yang sudah tidak disebut harga di luar julat selamat mungkin kehilangan ketepatan sebelum penulis lain melihatnya.

Kekunci objek ialah rentetan, dan pengisihan pilihan mengubah persembahannya. Tatasusunan tetap dipesan. Penghuraian yang ketat menolak ulasan, koma di belakang dan token angka tidak terhingga, mewujudkan garis dasar yang padat untuk pembaca lain.

Model nilai JSON seperti yang digunakan oleh pelaksanaan JavaScript ini

ToolAcre menerima YAML melalui JSON atau skema Teras terhad. Sauh dan alias diselesaikan, ulasan hilang, strim menjadi tatasusunan, kunci pendua mengekalkan nilai terakhir dengan amaran dan alias rekursif atau letupan ditolak.

Tag tersuai, binari, cap waktu, set dan pembina objek bahasa ditolak. Core Infinity dan NaN menjadi batal dalam format sasaran dengan amaran. Ini sengaja merupakan subset sistem teg YAML yang lebih luas, bukan tuntutan sokongan objek YAML yang lengkap.

Model YAML terhad ToolAcre menerima

TOML bermula dengan jadual dan menyokong rentetan, integer yang ditandatangani, terapung, boolean, tatasusunan, jadual dan empat jenis temporal. Ia tidak mempunyai null. ToolAcre menukar tarikh dan masa kepada rentetan berorientasikan sumber dan integer lebar kepada rentetan perpuluhan daripada kehilangan digit.

Apabila menulis TOML, kekunci objek nol ditinggalkan dan entri tatasusunan nol menjadi rentetan kosong. Tatasusunan akar dan skalar ditolak. Komen dan pilihan pengarang antara pengepala, kekunci bertitik dan jadual sebaris tidak kembali melalui nilai biasa.

Jadual punca TOML, nilai temporal dan sempadan nol

XML diunjurkan sebagai pepohon dengan atribut `@`, kekunci anak biasa, `#text`, `#cdata`, tatasusunan adik-beradik berulang dan awalan ruang nama literal. Ulasan, pengisytiharan dan arahan pemprosesan digugurkan. Kedudukan teks campuran hilang, dan satu lawan banyak tidak dapat diketahui sebelum pengulangan muncul.

Nilai dibaca sebagai rentetan melainkan inferens dipilih. Null ditulis daripada JSON menjadi elemen kosong dan tidak boleh dibezakan daripada rentetan kosong apabila dikembalikan. Setiap DOCTYPE ditolak dan nama yang tidak sah menghentikan siri dan bukannya ditulis semula.

Unjuran XML ToolAcre: unsur, atribut, teks dan awalan literal

Sembilan arah dihantar: JSON ke YAML, XML, TOML dan CSV; YAML hingga JSON dan TOML; TOML hingga JSON dan YAML; XML hingga JSON. Nilai biasa berbentuk JSON paling sesuai antara JSON dan YAML. TOML memperkenalkan tarikh dan sempadan batal. XML memerlukan konvensyen penamaan dan kategori nod.

CSV ialah outlier rata dan keluaran sahaja. Tatasusunan atau objek terpilih menjadi baris, laluan bersarang diratakan menjadi lajur bertitik, cantuman nol dengan teks kosong dan rentetan seperti formula dinetralkan. CSV-to-JSON, XML-to-TOML dan pasangan lain yang tidak hadir ditolak dan bukannya disimpulkan.

Matriks keserasian untuk sembilan arah yang dihantar, dengan CSV sahaja sebagai output

Format binari dan bahasa skema berada di luar skop. Skema boleh memulihkan kardinaliti senarai atau mengesahkan bentuk perniagaan, manakala pengekodan binari memperkenalkan jenis peringkat bait dan pembingkaian yang tidak diwakili di sini. Penukar tidak pernah menuntut keupayaan tersebut.

Penukaran sintaks juga tidak membuktikan kesahihan aplikasi. Mesej pesanan YAML, XML berbentuk Kubernetes bersih atau fail projek TOML masih boleh melanggar kontrak sasaran. Gunakan pengesah domain selepas memeriksa pemetaan sintaks.

Bawa pulang: pilih model, kemudian sintaks — dan cara panel penukar Sintaks membolehkan anda menguji penukaran sebelum melakukannya

Pilih model data sebelum memilih tanda bacanya. Jika ulasan dan alias penting, lompatan JSON tidak dapat mengekalkannya. Jika null penting, TOML output mengubahnya. Jika kandungan bercampur yang dipesan adalah penting, unjuran JSON biasa tidak mencukupi. Jika destinasi ialah jadual, bersarang JSON memerlukan konvensyen merata yang jelas.

Gunakan ToolAcre untuk menguji satu dokumen perwakilan dan baca setiap amaran. Hasilnya ialah bukti tentang pasangan konkrit dan input, bukan kebenaran untuk memanggil semua penukaran tanpa kehilangan atau setiap penghurai yang disokong lengkap.

Bina dokumen perwakilan daripada sempadan yang penting kepada perkhidmatan anda: null, teks kosong, pengecam besar, rentetan seperti tarikh, satu rekod berulang, ulasan atau alias jika YAML terlibat dan teks bercampur jika XML terlibat. Bandingkan nilai yang dinormalkan selepas setiap lompatan yang disokong dan kekalkan amaran dengan hasilnya. Matriks itu menjadi artifak keputusan untuk model yang dipilih dan bukannya keutamaan yang tidak jelas untuk sintaks yang biasa.