Data & spreadsheet · CSV Lebih bersih
Mengapa String Kosong, NULL, dan Bidang yang Hilang Bukan Hal yang Sama di CSV
· Mengapa itu penting
csv json format data
CSV tidak bisa mengatakan 'tidak ada nilai'; hanya memiliki teks. Postingan ini menjelaskan perbedaan kolom kosong, string kosong yang dikutip, NULL literal, dan baris pendek, mengapa pemuat tidak setuju dengan hal tersebut, dan bagaimana konversi ke JSON menimbulkan pertanyaan.
Sel kosong yang sama menjadi NULL di satu sistem dan string kosong di sistem lain — mengapa hal itu mengubah gabungan, jumlah, dan rata-rata
Sel sumber yang tampak kosong dapat membawa beberapa riwayat, tetapi keluaran JSON ToolAcre sengaja mempersempitnya menjadi satu representasi. Bidang kosong, bidang kosong yang dikutip, dan baris pendek yang diisi oleh parser semuanya menjadi string kosong di bawah kunci yang ada. Tidak ada nol yang disimpulkan dari penampilan.
Konsistensi itu hanya berguna bila konsumen mengetahuinya. Pengujian kode khusus untuk null tidak akan menggantikan "" default. Putuskan kontrak nilai yang hilang pada batas penerimaan alih-alih berasumsi bahwa konverter mempertahankan perbedaan yang tidak dipertahankan oleh sintaksis CSV atau model parse yang dipilihnya.
Di ToolAcre, sel kosong dan sel hilang yang diisi keduanya menjadi string kosong kecuali konsumen menafsirkan ulang sel tersebut
CSV dapat berisi dua pembatas tanpa ada apa pun di antaranya, string kosong yang dikutip secara eksplisit, teks literal seperti NULL atau NA, dan baris yang diakhiri sebelum lebar header. ToolAcre mem-parsing dua string pertama sebagai string kosong dan membiarkan token literal tidak tersentuh sebagai teks biasa.
Untuk baris pendek, ia mengeluarkan peringatan `RAGGED_ROW` dan mengisi sel-sel tambahan yang tidak ada dengan string kosong. Untuk baris yang panjang, ia mempertahankan sel tambahan dalam tabel, tetapi konversi JSON tidak memiliki kunci header dan menghilangkannya. Asimetri inilah yang menyebabkan peringatan struktural memerlukan tindakan sebelum konversi.
Bagaimana pemuat umum menafsirkan masing-masingnya — perbedaan default dalam spreadsheet, database, dan pustaka bingkai data
Klien database dan pustaka analisis yang berbeda mengekspos token null dan kebijakan bidang kosongnya sendiri yang dapat dikonfigurasi. Repositori ini tidak dapat menetapkan default tersebut, jadi artikel tersebut tidak mengklaim bahwa semua spreadsheet atau pemuat menyetujuinya. Ini mendokumentasikan implementasi yang sumber dan pengujiannya tersedia.
Saat menyerahkan file ke sistem lain, baca pengaturan importir tersebut dan buat perlengkapan untuk ``, `""`, NULL dan baris pendek. Kontrak yang dapat diandalkan ditunjukkan pada batas sebenarnya. Cerita rakyat umum tentang arti “CSV biasanya” terlalu lemah untuk kehilangan nilai.
Default pemuat bervariasi; artikel ini mendokumentasikan ToolAcre daripada menggeneralisasi perilaku spreadsheet atau database
Teks NULL sangat berbahaya karena dapat berupa konten asli atau penjaga pengirim. ToolAcre tidak memiliki daftar penjaga yang dikonfigurasi dan oleh karena itu mempertahankannya sebagai string empat karakter "NULL". Hal yang sama juga berlaku untuk NA, N/A, zero dan token lain yang mungkin digunakan produsen.
Jangan mengganti string tersebut secara global tanpa aturan khusus bidang. Kolom catatan dapat berisi “NULL”, dan kolom kode dapat menggunakan NA. Selesaikan makna dengan dokumentasi produser atau skema, lalu ubah hanya kolom yang sesuai yang sedang ditinjau.
JSON membuat Anda memutuskan — null, string kosong, dan kunci yang tidak ada adalah tiga hal yang berbeda setelah file dikonversi
JSON membedakan null, string kosong, dan properti yang tidak ada, tetapi ToolAcre memilih kunci yang ada dengan nilai string untuk setiap kolom header. Sel yang hilang atau terisi menjadi "". Konverter tidak menghasilkan JSON null dan tidak menghilangkan kunci hanya karena sel kosong.
Sel kelebihannya berbeda: tanpa header yang sesuai, tidak ada kunci untuk ditetapkan, sehingga tidak ada di objek yang dihasilkan. Peringatan baris memberi tahu Anda bahwa kerugian mungkin terjadi. Perbaiki lebar header atau baris sebelum mengunduh daripada membaca ketidakhadiran sebagai kebijakan nol yang berarti.
ToolAcre memancarkan string kosong dan kunci yang ada, bukan kunci nol atau tidak ada
Gunakan id header,catatan,kode dan empat catatan: `1,,A`, `2,"",NULL`, `3,hello` dan `4,world,B,extra`. Dua not pertama menjadi string kosong; kode di baris kedua tetap "NULL". Baris ketiga menerima kode "" setelah padding, sedangkan baris empat memperingatkan bahwa sel tambahan tidak memiliki kunci.
Objek yang dihasilkan tampak membawa tiga kunci yang sama untuk kolom yang diwakili. Kasus yang berhasil ini lebih informatif daripada tangkapan layar sel kosong karena menghubungkan peringatan parse ke bentuk JSON. Hal ini juga menunjukkan mengapa token literal memerlukan keputusan domain terpisah.
Apa yang tidak tercakup dalam hal ini — imputasi dan aturan bisnis tentang nilai yang hilang harus menjadi default
Imputasi berada di luar jalur. Konverter tidak mengisi harga yang hilang, menyalin nilai sebelumnya, atau menyimpulkan default dari baris tetangga. Perubahan tersebut bergantung pada makna bisnis dan harus terjadi setelah skema membedakan nilai yang tidak diketahui, tidak dapat diterapkan, dan sengaja dikosongkan.
Itu juga tidak mempertahankan perbedaan sintaksis antara bidang kosong tanpa tanda kutip dan `""`; keduanya diurai ke string sel yang sama. Jika perbedaan itu penting, CSV tidak membawanya melalui model tabel parser ini. Pilih representasi dengan status eksplisit atau pertahankan sumber mentah bersama data turunan.
Putuskan apa artinya kosong sebelum Anda memuat — bagaimana konversi ToolAcre CSV Cleaner CSV-ke-JSON membuat representasi terlihat
Putuskan apa artinya kosong sebelum memuat JSON ke dalam kode yang diketik. ToolAcre memberikan garis dasar transparan: nilai string di mana pun, string kosong untuk sel yang tidak terwakili, kata penjaga literal tidak berubah, dan peringatan jika bentuk baris melebihi kunci yang tersedia.
Periksa peringatan-peringatan tersebut dan dokumentasikan segala bentuk pemaksaan di kemudian hari. Konverter tidak dapat membuat semantik nilai yang hilang hanya dari teks, namun dapat menghindari menyembunyikan pilihannya sendiri. Perilaku yang dapat diprediksi tersebut menjadikan batasan berikutnya bertanggung jawab atas kebijakan yang benar-benar memenuhi syarat untuk ditegakkan.