Alat pembangun · Penukar sintaks
YAML hingga JSON jenis paksaan: bagaimana ya, tidak dan 0777 menukar makna
· Bagaimana ia berfungsi
yaml json format data
YAML menyelesaikan skalar yang tidak disebut sebagai jenis dan peraturannya berbeza antara YAML 1.1 dan 1.2. Siaran ini menunjukkan dengan tepat cara penukar memutuskan bahawa nilai ialah boolean, integer, apungan atau rentetan dan cara mengawal hasil.
Nilai yang kembali sebagai benar — skalar biasa YAML bermaksud sebagai teks, ditukar kepada JSON sebagai boolean dan perkhidmatan yang kemudiannya tidak berfungsi
Nilai seperti `NO` boleh menjadi palsu dalam a YAML 1.1 pemuat, tetapi bukan itu yang dihantar oleh penukar ini. Kedua-duanya ToolAcre pilihan menggunakan YAML 1.2 skema, jadi `NO`, `yes`, `no`, `on` dan `off` kekal rentetan. Pembukaan yang diperbetulkan penting kerana contoh yang mendakwa bahawa panel ini bertukar `NO` ke dalam benar atau salah akan mengajar yang bertentangan dengan tingkah laku yang diuji.
Jenis kejutan masih wujud. Di bawah skema JSON lalai, `null` adalah batal manakala `~`, nilai kosong dan `0o755` kekal rentetan. Memilih Teras menukar ketiga-tiga bentuk tersebut kepada null, null dan 493. Output adalah berguna dengan tepat kerana ia mendedahkan nilai JavaScript yang diselesaikan, dan bukannya berpura-pura bahawa setiap token YAML biasa membawa jenis yang jelas.
Nilai yang kekal teks di bawah YAML 1.2
Resolusi tersirat berlaku semasa js-yaml membaca sumber. Skema terhad yang dipilih memutuskan sama ada skalar biasa sepadan dengan bentuk null, Boolean atau angka sebelum penukar menulis JSON. Petikan memintas keputusan itu: `"0o755"` ialah teks di bawah mana-mana skema dan skalar blok kekal sebagai rentetan termasuk pemisah baris yang diwakili oleh penunjuk chompingnya.
Ini adalah penghuraian dan penyirian, bukan penggantian ungkapan biasa. Pembaca membina rentetan, nombor, boolean, nol, tatasusunan dan objek; `JSON.stringify` kemudian mengeluarkan nilai tersebut dengan lekukan yang dipilih. Komen dan ejaan token sudah pun hilang pada peringkat penulisan, jadi tiada penyeri boleh membina semula sama ada nombor asalnya perpuluhan atau ditulis dalam tatatanda YAML lain yang diterima.
Peraturan YAML 1.1 — yes/no/on/off boolean, 0777 sebagai oktal, 1:30 sebagai sexagesimal dan rentetan versi seperti 1.10 dibaca sebagai terapung
Garis besar tersebut menyenaraikan YAML 1.1 paksaan seperti masa jantinasimal dan perlapanan warisan. Ia adalah bahaya keserasian yang berkaitan, tetapi ia bukan mod yang tersedia di sini. ToolAcre sengaja tidak menawarkan skema 1.1. UInya mengatakan bahawa tiada pilihan yang dihantar berbunyi `NO` sebagai palsu dan menguji pin kod negara itu dan perkataan ya, tidak, hidup dan mati sebagai rentetan.
Sempadan itu mengubah kaedah penyahpepijatan. Jika aplikasi lain menukar perkataan tersebut menjadi boolean, bandingkan konfigurasi penghurainya dengan ToolAcre dan bukannya mengharapkan output yang sama. Penukar boleh menunjukkan apa yang dihasilkan oleh dua skemanya sendiri; ia tidak boleh mengesahkan skema atau versi yang digunakan oleh pelari CI, rangka kerja atau sistem penggunaan yang kemudiannya menggunakan fail tersebut.
YAML 1.1 paksaan adalah bahaya yang dielakkan penukar ini
Skema lalai JSON sahaja menerima ejaan skalar yang serasi dengan model JSON. Teras menambah bentuk nol YAML, integer heksadesimal dan perlapanan, Infiniti dan NaN yang biasa. Teras masih kekal dalam pemuat terhad: teg objek khusus bahasa, tarikh, set, peta tersusun dan teg binari ditolak dan bukannya dibina.
Infiniti dan NaN mendedahkan sempadan lain. JavaScript boleh menahannya, tetapi JSON tidak boleh menulisnya. Penukar mengenal pasti setiap laluan dan memberi amaran bahawa nilai menjadi batal. Itu adalah langkah rugi yang diakui, bukan penukaran tanpa kerugian. `.inf` yang dipetik mengelakkannya kerana nilai itu kemudiannya kekal sebagai rentetan literal `.inf`.
Kedua-dua skema YAML 1.2 yang dihantar sahaja berbeza pada bentuk skalar yang didokumenkan
Tampal `tilde: ~`, `empty:`, `octal: 0o755`, `country: NO` dan `answer: yes`. Dengan pilihan yang ketat, nilai JSON ialah `"~"`, `""`, `"0o755"`, `"NO"` dan `"yes"`. Dengan Teras dipilih, sahaja tiga perubahan pertama: tilde dan kosong menjadi batal, dan oktal menjadi 493. Negara dan jawapan kekal teks dalam kedua-dua output.
Sekarang sebutkan setiap nilai dan ulangi. Kedua-dua skema mengembalikan rentetan kerana sumber menyatakan jenis yang dimaksudkan. Perbandingan ini adalah kod-tepat dan lebih berguna daripada membezakan YAML 1.1 dengan 1.2 di dalam alat yang tidak pernah memuatkan 1.1. Ia juga memberikan lekapan yang boleh disemak untuk menyemak penghurai lain tanpa meneka daripada dokumentasinya sahaja.
Contoh berfungsi: satu fail di bawah skema ketat dan Teras ToolAcre
Teg standard eksplisit diterima sahaja apabila skema terhad mengecamnya: `!!str 123` menjadi rentetan `123`, manakala `!!int "7"` menjadi nombor 7. Teg seperti `!!binary`, `!!timestamp`, `!!set`, `!!js/function` dan pembina objek Python ditolak. Ini menghalang pembaca YAML daripada menjadi kilang objek sewenang-wenangnya.
Petikan kekal sebagai pilihan mudah alih apabila nilai konfigurasi sahaja kelihatan ditaip. Ia mengekalkan sifar utama, ejaan versi dan perkataan sentinel tanpa bergantung pada teg eksplisit yang masih ada pada alat lain. Hasil JSON menunjukkan jenis yang dipilih, tetapi ia tidak boleh membawa gaya petikan atau teg yang menghasilkan nilai tersebut.
Perkara ini tidak meliputi — penghuraian peringkat aplikasi JSON yang terhasil, yang mungkin memaksa jenis sekali lagi (contohnya, rentetan '1' kepada nombor)
Kod aplikasi mungkin memaksa JSON yang dihasilkan sekali lagi. API boleh membaca `"1"` dan menukarnya kepada nombor atau menolaknya terhadap skema. Penukar sintaks berhenti selepas menghasilkan teks JSON; ia tidak menjalankan pengesah rangka kerja, pemuat pembolehubah persekitaran atau peraturan perniagaan. Oleh itu, penukaran yang bersih membuktikan sintaks dan pemetaan, bukan penerimaan oleh perkhidmatan akhir.
Kekunci YAML pendua ialah isu yang berasingan. ToolAcre menyimpan nilai terakhir dan melaporkan kunci berulang dengan kedudukan. Strim berbilang dokumen menjadi tatasusunan. Pilihan tersebut boleh mengubah perkara yang dilihat oleh aplikasi walaupun setiap jenis skalar dijangka, jadi baca amaran daripada menilai sahaja badan JSON yang diformatkan.
Bawa pulang: sebutkan apa sahaja yang mungkin salah baca mesin — dan cara menukar YAML kepada JSON dalam pelayar mendedahkan dengan tepat apa yang diselesaikan oleh setiap skalar
Petikan teks yang menyerupai token mesin, kemudian periksa jenis JSON. Gunakan ketat apabila anda mahukan perbendaharaan kata skalar berbentuk JSON terkecil; pilih Teras dengan sengaja apabila YAML borang null dan angka diperlukan. Kedua-dua pilihan adalah YAML 1.1 dan kedua-duanya tidak menjadikan pengguna hiliran mengikut peraturan yang sama.
Panel menjadikan pilihan penghurainya kelihatan dan mengembalikan amaran untuk nilai yang tidak boleh diwakili oleh sasaran. Itulah janji jujur: ia mendedahkan bagaimana pelaksanaan ini menyelesaikan setiap skalar. Ia tidak menuntut tingkah laku YAML universal atau mengekalkan ulasan, teg dan ejaan melalui perjalanan pergi dan balik.