Bahasa Melayu

Alat pembangun · Penukar sintaks

YAML ciri hilang dalam penukaran JSON: ulasan, sauh dan teg

· Bagaimana ia berfungsi

yaml json format data

YAML ulasan dan sauh pudar sementara data yang diselesaikan diteruskan ke JSON
Ilustrasi vektor ToolAcre asal

YAML mempunyai ulasan, sauh, alias, kunci gabungan, teg dan strim berbilang dokumen; JSON tidak mempunyai satu pun daripadanya. Siaran ini menerangkan perkara yang dilakukan oleh penukar dengan setiap satu dan sebab penukaran semula tidak pernah memulihkan fail asal.

Fail itu kembali lebih lama dan tanpa satu ulasan — konfigurasi YAML ditukar kepada JSON dan kembali, dan semua yang tidak bertahan

Fail YAML boleh kembali dari JSON lebih lama walaupun selepas setiap ulasan hilang. Sauh yang berkongsi satu pemetaan diselesaikan ke dalam data objek berulang, jadi penyeri bersiri menulis setiap salinan secara berasingan. Nilai mungkin masih bersetuju, namun struktur pengarangan dan penjelasan telah hilang.

Itulah sebabnya YAML-to-JSON-to-YAML pergi dan balik harus dinilai sebagai penukaran data, bukan pemeliharaan sumber. ToolAcre membaca graf nilai terhad dan menulis dokumen baharu. Ia tidak pernah mengekalkan pepohon sintaks konkrit yang mengandungi ulasan, nama sauh, pilihan petikan atau pembentangan skalar blok.

Ulasan — mengapa JSON tiada tempat untuk mereka dan setiap # baris hilang selepas penukaran

Ulasan dibuang oleh penghurai YAML kerana JSON tidak mempunyai nod ulasan. Baris yang bermula dengan `#` boleh menerangkan sebab tamat masa wujud atau siapa yang memiliki perkhidmatan; selepas dialih keluar, tiada algoritma boleh membuat kesimpulan perkataan atau peletakan. Menukar kembali menghasilkan YAML yang sah tanpa konteks operasi itu.

Kekalkan fail asal dalam kawalan versi dan semak perbezaan sebelum menggantikannya. Jika matlamatnya sahaja untuk memeriksa nilai yang diselesaikan, JSON berguna. Jika matlamatnya adalah untuk memformat semula sambil mengekalkan ulasan, penukar nilai generik ini ialah perwakilan yang salah.

Sauh dan alias — &lalai dan *lalai dikembangkan menjadi salinan berulang, dan cara fail berkembang sebagai hasilnya

Sauh dan alias diterima dalam had keselamatan, kemudian diselesaikan. `base: &b {x: 1}` dan `copy: *b` menjadi dua laluan objek yang mengandungi `x: 1`. Output YAML menggunakan `noRefs`, jadi identiti objek kongsi tidak mencipta sauh baharu. Hubungan yang kompak telah hilang walaupun apabila nilai yang diulang bertahan.

Alias ​​rekursif ditolak kerana JSON tidak boleh menyatakan kitaran. Pengembangan alias dihadkan oleh kiraan alias, bersarang dan ukuran nod dikembangkan; dokumen pendek yang akan merangkaikan lebih daripada satu juta nilai dihentikan. Ini melindungi tab tanpa menuntut sokongan YAML sewenang-wenangnya.

Kekunci gabungan — konvensyen <<: daripada YAML 1.1, cara penghurai yang menyokongnya meratakan pemetaan gabungan dan apa yang berlaku dalam pemetaan yang tidak

Garis besar menganggap YAML 1.1 kekunci gabungan diratakan. ToolAcre sahaja memuatkan skema JSON atau Teras js-yaml, kedua-duanya tidak mendayakan jenis gabungan. Di bawah skema ini, kunci `<<` ialah data biasa dan bukannya arahan untuk menggabungkan pemetaan. Oleh itu, mempersembahkan gabungan yang diratakan sebagai gelagat dihantar adalah palsu.

Jika sumber anda bergantung pada semantik kunci gabungan, selesaikannya dalam aplikasi yang memiliki konvensyen itu atau tulis semula nilai secara eksplisit sebelum penukaran. Alias ​​yang digunakan sebagai nilai `<<` biasa masih boleh diselesaikan pada objek, tetapi kuncinya kekal `<<`; itu tidak bersamaan dengan menggabungkan ahlinya menjadi induk.

Kekunci gabungan tidak didayakan oleh dua skema terhad yang dihantar oleh penukar ini

Teg eksplisit standard yang diiktiraf oleh skema terhad boleh memilih jenis asas, seperti `!!str` atau `!!int`. Teg tersuai dan lebih kaya—termasuk binari, cap masa, set, peta tersusun, fungsi JavaScript dan pembina objek Python—ditolak. Mereka tidak terikat dan tidak pernah dilaksanakan.

Strim YAML yang dipisahkan oleh `---` diterima. Satu dokumen menjadi satu nilai; beberapa menjadi tatasusunan dengan amaran menamakan kiraan dokumen. Pemisah mengekor boleh membuat dokumen akhir kosong mengikut skema yang dipilih. Tiada sasaran di sini yang mempunyai model strim, jadi tatasusunan ialah konvensyen yang diisytiharkan.

Tag yang tidak selamat ditolak; aliran berbilang dokumen menjadi tatasusunan

Gunakan `defaults: &d` dengan percubaan semula dan tamat masa, ulasan yang menerangkan tamat masa, kemudian `service:` dengan `inherited: *d`. JSON mengandungi kedua-dua lalai dan objek diwarisi berulang; komen dan nama sauh tiada. Menukar JSON belakang itu mengeluarkan dua pemetaan dan bukannya hubungan utama.

Tambahkan `---` diikuti dengan dokumen lain dan akar JSON menjadi tatasusunan dokumen. Tambahkan `!!binary` dan penukaran dihentikan dengan pembayang skema terhad. Tiga perubahan ini membezakan data disokong yang diselesaikan, konvensyen struktur dan pembinaan langsung tidak disokong.

Perkara ini tidak meliputi — susunan kunci dan gaya petikan, yang biasanya bertahan tetapi tidak dijamin oleh mana-mana format

Tertib sisipan objek biasa selalunya kekal kelihatan, tetapi ia bukan pemeliharaan gaya sumber, dan memilih kekunci isihan sengaja mengubahnya. Petikan, aliran lawan gaya blok, ejaan skalar dan ulasan tidak kekal. Kekunci pemetaan pendua menyimpan nilai terakhir dengan amaran dan bukannya mengekalkan kedua-dua entri yang tidak sah.

Penulis melindungi rentetan samar-samar dengan memetik nilai pengguna YAML 1.1 mungkin salah baca, tetapi pilihan keselamatan itu mungkin berbeza daripada gaya asal pengarang. Kesamaan data ialah ujian yang boleh dipertahankan untuk nilai berbentuk JSON biasa; kesaksamaan teks tidak.

Urutan utama mungkin kekal, manakala ulasan, sauh, ejaan tag dan gaya tidak dikekalkan

YAML-to-JSON adalah lossy apabila makna hidup di luar nilai berbentuk JSON: ulasan, alias, teg tidak disokong, sempadan strim seperti itu dan gaya. ToolAcre membuat beberapa kerugian kelihatan dan menolak binaan berbahaya atau kitaran daripada berpura-pura memeliharanya.

Tukar fail perwakilan sebelum menerima pakai aliran kerja. Periksa amaran, perbezaan nilai yang diselesaikan dan simpan YAML yang dikarang. Panel ialah lensa yang sangat baik pada perkara yang dilihat oleh penghurai, tetapi ia bukan editor yang memelihara ulasan atau pengubah model objek YAML penuh.

Untuk semakan migrasi, perubahan nilai yang berasingan daripada perubahan sumber sahaja. Perbandingan mendalam JSON boleh menentukan sama ada nilai biasa kekal, manakala perbezaan teks mendedahkan ulasan, sauh dan gaya yang semestinya berubah. Tiada cek menggantikan yang lain. Memanggil perbandingan nilai tanpa kerugian akan mengabaikan maklumat sumber; memanggil setiap perubahan teks sebagai kegagalan data akan mengabaikan pensirian semula yang sah.