Alat pengembang · Konverter sintaksis
Standar CSV yang hilang: apa yang tercakup dalam RFC 4180 dan apa yang dibiarkan terbuka
· Latar belakang
csv json format data
CSV ada sebelum spesifikasi apa pun, dan RFC yang mendeskripsikannya bersifat informatif dan sengaja dibuat sempit. Posting ini menjelaskan apa yang didefinisikan RFC 4180, apa yang tidak disebutkan di dalamnya, dan mengapa konversi CSV selalu merupakan negosiasi.
CSV siapa yang benar? — dua ekspor tabel yang sama, satu dengan titik koma dan satu lagi dengan koma, keduanya disebut CSV
ToolAcre dapat mengeluarkan keluaran yang dibatasi koma, titik koma, atau tab dari JSON. Itu tidak membaca dua ekspor CSV yang bersaing atau menyatakan salah satunya benar. CSV di sini hanya untuk tulis, jadi pilihan pembatas adalah opsi keluaran eksplisit daripada algoritme deteksi.
Pembedaan tersebut mencegah terjadinya kesalahan faktual yang umum. Antarmuka yang dapat menulis titik koma belum terbukti dapat mengidentifikasi titik koma dalam file yang tidak dikenal, menangani desimal lokal, atau menafsirkan header. Itu adalah tanggung jawab masukan terpisah yang sengaja dikecualikan.
Dua pilihan pembatas adalah opsi keluaran, bukan bukti bahwa panel ini membaca salah satu file
Repositori tidak berisi sumber untuk spreadsheet awal atau riwayat database, sehingga artikel tersebut tidak membuat kronologi. Ini dimulai dengan penulis saat ini dan pengujiannya: catatan, bidang, pembatas, penghentian CRLF, dan pelolosan kutipan.
Konteks sejarah dapat ditambahkan kemudian dengan sumber-sumber yang diulas. Implementasi konverter adalah bukti atas apa yang ditulis produk saat ini, bukan kapan konvensi pertama kali muncul atau mengapa vendor berbeda pendapat.
CSV riwayat sebelum RFC 4180 berada di luar bukti repositori
Bidang yang berisi pembatas, tanda kutip ganda, pengangkutan kembali, atau umpan baris diapit tanda kutip ganda, dan setiap tanda kutip yang disematkan digandakan. Spasi di depan atau di belakang juga diberi tanda kutip untuk mencegah pemangkasan spreadsheet secara umum. Catatan diakhiri dengan CRLF dan file dihentikan.
Perilaku ini mengikuti aturan gaya RFC 4180 yang diuji di repositori. Artikel ini menghindari klaim kepatuhan universal karena penulis juga mendukung pembatas alternatif dan menambahkan penanganan keamanan di luar tata bahasa yang sempit.
Penulis menggunakan kutipan gaya RFC 4180 dan CRLF tanpa mengklaim kepatuhan standar penuh
Sel CSV tidak mempertahankan tipe JSON. String kosong dan kosong keduanya menjadi sel kosong, sedangkan boolean dan angka menjadi representasi teks. Konten UTF-8 diteruskan dan BOM opsional dapat diawali untuk konsumen yang membutuhkannya.
Interpretasi lokal tidak tertanam. Pembatas titik koma dapat hidup berdampingan dengan koma desimal, namun penulis tidak memformat ulang angka berdasarkan lokal atau mengkodekan jenis tanggal. Aplikasi penerima masih memutuskan bagaimana menafsirkan setiap bidang.
Batasan pengkodean, jenis dan lokasi tetap eksplisit dalam penulis ini
Variasi yang diterapkan adalah koma, titik koma, dan tab, ditambah BOM opsional. Teks seperti rumus yang diawali dengan `=`, `+`, `-`, `@`, tab atau carriage return diawali dengan tanda kutip secara default sehingga spreadsheet memperlakukannya sebagai teks. Pengguna dapat menonaktifkan perlindungan itu dan menerima peringatan.
Tidak ada petunjuk `sep=` atau mode backslash-escape dalam penulis ini. Menyebutnya sebagai opsi terkirim adalah salah. Kutipan yang disematkan menggunakan penggandaan, persis seperti yang dinyatakan dalam pengujian.
Variasi spreadsheet yang diamati terbatas pada opsi dan perlindungan yang diterapkan di sini
Setiap asumsi dalam rute ini dimulai dari penguraian JSON: nilai mana yang memasok baris, bagaimana penyarangan diratakan menjadi kolom bertitik, dan kunci mana yang menjadi header. Tidak ada asumsi yang dibuat tentang dialek CSV yang masuk karena CSV yang masuk ditolak.
Koreksi ini membalikkan arah yang diminta buku kerja. Alur kerja CSV-to-JSON harus memilih pembatas, kutipan, header, dan tipe sel di alat lain. Kesalahan ToolAcre menjelaskan penolakan itu daripada menebak-nebak secara diam-diam.
Asumsi konversi berlaku untuk JSON-ke-CSV hanya karena masukan CSV ditolak
Memperbaiki CSV yang salah berada di luar cakupan. Kutipan rusak, pengkodean campuran, dan pembatas yang tidak disengaja memerlukan CSV Cleaner atau parser lain dengan diagnostik eksplisit. Konverter sintaks menerima teks JSON yang ketat, bukan teks CSV yang rusak.
Output mungkin masih tidak sesuai untuk target ketika pohon bertumpuk membuat kolom titik-titik yang ambigu atau melebihi 2,000 kolom. Peringatan dan batasan memperlihatkan kegagalan bentuk tabel tersebut sebelum diunduh.
Kesimpulan: CSV adalah konvensi, bukan format — dan bagaimana panel Konverter Sintaks mengubah file yang dibuat dengan baik menjadi JSON dapat Anda periksa
Perlakukan CSV sebagai konvensi yang pilihannya harus terlihat. ToolAcre mendokumentasikan pilihan keluarannya dan menolak kebalikannya yang kurang ditentukan. Hal ini lebih dapat diandalkan dibandingkan menggunakan satu tombol untuk dua pekerjaan yang berbeda secara mendasar.
Periksa pembatas, tanda kutip, CRLF, BOM dan formula yang keluar dari sistem penerima. Jika penguraian masukan diperlukan, gunakan alat yang meminta alih-alih mentransfer konvensi penulis ke file yang tidak dikenal.
Pemeriksaan penerimaan praktis membuka file yang dihasilkan di konsumen yang dituju dan juga memeriksa byte atau teks mentah. Pandangan konsumen menangkap masalah tampilan dan impor; tampilan mentah mengonfirmasi pembatas, tanda kutip ganda, CRLF dan BOM opsional tanpa penafsiran ulang spreadsheet. Uji string seperti rumus sebagai teks inert dan bilangan negatif sebagai bilangan. Pemeriksaan berpasangan tersebut memverifikasi kontrak sebenarnya penulis tanpa mengklaim bahwa setiap program mengimplementasikan konvensi CSV secara identik.