Bahasa Melayu

Alat pembangun · Penukar sintaks

Mengapa TOML mempunyai jenis tarikh-masa asli dan JSON tidak (RFC 3339)

· Latar belakang

toml json cap masa

Empat TOML nilai temporal menyempitkan ke dalam rentetan JSON yang dipetik tanpa ciptaan zon
Ilustrasi vektor ToolAcre asal

TOML ialah satu-satunya format dalam kumpulan ini dengan tarikh dan masa kelas pertama, semuanya ditakrifkan oleh RFC 3339. Siaran ini menerangkan empat jenis TOML tarikh masa, sebab JSON sengaja tidak mempunyai apa-apa dan apakah kaitan penukaran dengannya.

Tarikh yang menjadi rentetan — konfigurasi TOML dengan tarikh keluaran, ditukar kepada JSON dan dikurangkan kepada teks

Tarikh tempatan TOML seperti `1979-05-27` menjadi rentetan JSON `"1979-05-27"`. Aksara kalendar bertahan, tetapi jenis TOML asli tidak. Menukarkan JSON itu kembali menulis rentetan yang disebut, bukan token tarikh dan ToolAcre memberi amaran pada penukaran pertama.

Ini ialah sempadan yang tidak dapat dielakkan dalam nilai JSON biasa yang dipilih. Memanggil perjalanan pergi dan balik tanpa kerugian akan mengelirukan teks yang disimpan dengan jenis yang disimpan. Amaran itu menamakan kedua-dua laluan dan jenis temporal supaya pengulas boleh memutuskan sama ada rentetan boleh diterima hiliran.

Mengapa JSON tidak mempunyai jenis tarikh — minimalisme Crockford, konvensyen rentetan ISO 8601 dan konvensyen milisaat sejak zaman yang bersaing untuk mengisi jurang

JSON menghuraikan di sini menghasilkan null, boolean, nombor, rentetan, tatasusunan dan objek; ia tidak menghasilkan objek Tarikh. Repositori membuktikan fakta pelaksanaan itu tetapi tidak memperoleh penjelasan sejarah untuk JSON minimalism atau konvensyen industri yang bersaing.

Aplikasi boleh menggunakan rentetan seperti ISO atau nombor zaman mengikut persetujuan, tetapi ia adalah konvensyen berlapis pada JSON. Penukar sintaks tidak membuat kesimpulan satu daripada teks sembarangan dan tidak menukar TOML nilai temporal kepada aritmetik zaman.

JSON tidak mempunyai jenis tarikh asli dalam penukar ini; rasional asal adalah bukti repositori di luar

TOML mendedahkan empat jenis: mengimbangi masa tarikh dengan Z atau mengimbangi angka, masa tarikh tempatan tanpa zon, tarikh tempatan dan waktu tempatan. smol-toml mewakilinya sebagai objek seperti tarikh yang membawa metadata jenis; ToolAcre mengenal pasti setiap satu sebelum menormalkannya.

Perbezaan itu menghalang kesilapan yang serius. Waktu tempatan tidak ditetapkan secara senyap UTC dan tarikh-masa tempatan tidak dialihkan antara zon. Offsetnya yang tidak hadir kekal tiada dalam rentetan JSON.

RFC 3339 sebagai asas — profil ISO 8601 yang TOML pinjam, termasuk elaun pemisah ruang

Normalizer memanggil pemformat ISO nilai penghurai dan sahaja mengalih keluar pecahan `.000` sintetik. Ia mengekalkan detik pecahan yang bermakna dan bentuk tempatan berbanding mengimbangi berorientasikan sumber. Kod ini menerangkan ini sebagai teks RFC 3339, tetapi artikel itu tidak mencipta klausa spesifikasi seperti elaun pemisah melebihi output yang diuji.

Contoh offset kekal sebagai teks tarikh-masa dan bukannya ditukar kepada nilai Z universal oleh lapisan ini. Itu mengelakkan mengubah perwakilan bertulis dan mengekalkan tafsiran temporal untuk aplikasi yang memilikinya.

ToolAcre mengekalkan teks temporal berorientasikan sumber tanpa menegaskan butiran pematuhan RFC 3339 penuh

Setiap nilai temporal menjadi rentetan dan amaran mengatakan bahawa JSON, YAML dan XML tidak mempunyai jenis tarikh dalam model penukaran ini. Offset tidak sengaja digugurkan dan nilai tempatan tidak memperolehnya. Maklumat yang hilang ialah kategori jenis TOML itu sendiri.

Pada penukaran terbalik, rentetan dipetik kerana penulis tidak mempunyai penanda yang memberitahunya untuk memulihkan masa tarikh. Menghuraikan semula rentetan yang kelihatan tarikh sewenang-wenangnya kerana tarikh akan tersilap menaip pengecam atau label biasa dan akan mencipta konvensyen yang tidak dikongsi oleh JSON.

Penukar mengekalkan ejaan tempatan berbanding mengimbangi, kemudian kehilangan jenis TOML asli

Gunakan `odt = 1979-05-27T07:32:00Z`, `ldt = 1979-05-27T07:32:00`, `ld = 1979-05-27` dan `lt = 07:32:00`. JSON mengandungi empat rentetan dengan ejaan tersebut. Amaran menyenaraikan laluan tarikh-masa, tarikh-masa tempatan, tarikh tempatan dan masa tempatan.

Tukarkan JSON kembali kepada TOML. Setiap nilai disebut. Pecahan `00.500Z` kekal pecahan, manakala nilai seluruh saat tidak mendapat `.000`. Ini ialah gelagat sebenar yang disokong dan jelas menunjukkan teks yang dipelihara berbanding jenis yang hilang.

Contoh yang berfungsi: keempat-empat TOML jenis temporal menjadi rentetan dan kembali dipetik

Carian peraturan zon waktu, peralihan penjimatan siang dan penukaran zaman bukan sebahagian daripada laluan ini. Waktu tarikh tempatan tanpa zon tidak boleh menjadi satu seketika yang unik tanpa maklumat lanjut. Penukar cap waktu Unix mengalamatkan segera yang diketahui di bawah kontrak yang berbeza.

Jangan suapkan setiap rentetan yang terhasil ke JavaScript Tarikh dan anggap maksud yang setara. Tarikh tempatan, masa tempatan dan masa tarikh tanpa zon memerlukan konteks aplikasi. Kekalkan amaran dan semantik medan melalui migrasi.

Bawa pulang: TOML tahu apa itu tarikh, JSON sahaja tahu apa itu rentetan — dan cara panel penukar Sintaks menunjukkan perbezaan itu dalam pelayar anda

TOML mengetahui empat kategori temporal; JSON sahaja menerima rentetan di sini. ToolAcre mengekalkan ejaan dengan berhati-hati dan enggan mencipta zon, tetapi jenis asli hilang dan tidak boleh dibina semula secara automatik apabila dikembalikan.

Semak setiap laluan yang diberi amaran dan tentukan konvensyen aplikasi apabila semantik temporal mesti bertahan. Jika tiada konvensyen sedemikian wujud, pastikan TOML sebagai sumber yang berwibawa daripada menganggap perjalanan pergi dan balik yang disebut sebagai setara.

Konvensyen bunyi juga menamakan rentetan yang boleh dihuraikan semula dan di bawah konteks apa. Masa tarikh mengimbangi boleh mengenal pasti seketika, manakala masa tarikh, tarikh atau masa tempatan tidak boleh berbuat demikian tanpa peraturan tambahan. Simpan jenis asal di sebelah rentetan ternormal apabila peringkat kemudian perlu membina semula TOML atau menjadualkan kerja. Jika tidak, terima bahawa JSON membawa teks paparan dan elakkan mempromosikannya secara senyap kepada cap waktu universal.