Data & spreadsheet · CSV Lebih bersih
Mengonversi Antara CSV dan JSON: Bentuk, Jenis, dan Apa yang Hilang
· Cara kerjanya
csv json format data
CSV adalah teks datar dan JSON merupakan data yang diketik dan disarangkan, sehingga konversi antar keduanya memerlukan keputusan. Postingan ini menjelaskan bentuk JSON yang umum untuk data tabular, bagaimana tipe disimpulkan atau tidak, dan apa yang tidak dapat bertahan dalam perjalanan bolak-balik.
API menginginkan JSON, ekspornya adalah CSV, dan setiap angka muncul sebagai string — mengapa kedua format tidak setuju mengenai tipe
Ekspor spreadsheet dapat menampilkan 42 tanpa menyatakan apakah karakter tersebut berarti hitungan, kode produk, atau pengenal. JSON dapat membedakan angka dari string, namun sumber CSV tidak dapat memberikan perbedaan tersebut. Oleh karena itu, ToolAcre memilih representasi konservatif: setiap sel menjadi string JSON, termasuk angka, kata-kata yang tampak sebenarnya, dan sel kosong.
Keputusan tersebut menjaga teks seperti 0012 tetap utuh dan membuat konversi dapat diprediksi untuk integrasi API. Ini juga berarti kode hilir harus memasukkan bidang di bawah skemanya sendiri sebelum melakukan aritmatika. Memperlakukan file yang dihasilkan sebagai sudah diketik hanya memindahkan asumsi dari konverter ke dalam kode aplikasi yang kurang terlihat.
Bentuk target yang biasa — serangkaian objek yang dikunci berdasarkan header, dan alasan mengapa header harus bersih dan unik
Rute ini menghasilkan array tingkat atas dengan satu objek untuk setiap baris data. Sel header menjadi kunci objek, dan nilai diambil dari posisi kolom yang sama. Header ketiga yang kosong menjadi kolom_3, sedangkan header kedua bernama id menjadi id_2 alih-alih menimpa kolom id pertama.
Nama yang bersih dan unik memang berguna, tetapi konverter tidak menggunakan huruf kecil, mentransliterasi, atau mengganti spasi. Ini memangkas header hanya saat menghitung kunci, kemudian menciptakan nama posisi atau akhiran numerik jika diperlukan. Jika API memerlukan email_pelanggan dan bukan Email Pelanggan, ganti nama kolom tersebut dengan sengaja sebelum mengandalkan kontrak keluaran.
Bentuk alternatif - susunan array dan objek berorientasi kolom, dan kapan masing-masing lebih cocok
Garis besar mengusulkan susunan array dan objek berorientasi kolom sebagai target yang dapat dipilih. Itu adalah desain data yang masuk akal, tetapi antarmuka ini tidak menawarkannya. Keluarannya selalu berupa larik JSON rekaman datar yang dikunci oleh baris CSV pertama, diberi indentasi dua spasi agar pemeriksaan dapat dibaca.
Pilihan sempit tersebut menghilangkan ambiguitas tentang lokasi nama kolom dan menjaga agar setiap catatan tetap berbentuk sama. Jika konsumen lain mengharapkan array, ubah JSON yang diunduh di bawah skema konsumen tersebut. Mengklaim bahwa ToolAcre memilih di antara beberapa tata letak akan menjelaskan kontrol dan cabang yang tidak ada dalam konfigurasi atau kode panel.
Konverter ini memancarkan satu bentuk: susunan objek datar tingkat atas
Tidak ada tebakan tipe yang terjadi. Teks CSV 42 menjadi "42", false menjadi "false", dan blank menjadi "" bukannya null. Hal ini terlihat jelas dalam rekaman dan implementasi alat, yang memetakan sel secara langsung ke properti string. Rute tidak memeriksa kolom dan memutuskan bahwa semua nilai yang tidak kosong adalah numerik.
Mempertahankan string juga memisahkan artikel ini dari diskusi yang dipublikasikan tentang aplikasi spreadsheet yang mengubah angka nol, tanggal, dan pengidentifikasi panjang di depan. Di sini intinya adalah kontrak aktual konverter: ia menghindari jenis pemaksaan tersebut. Konsumen tetap bertanggung jawab untuk menguraikan jumlah yang diketahui dan membiarkan pengidentifikasi tidak tersentuh.
Jenis dipertahankan sebagai teks; ToolAcre tidak melakukan inferensi
Dalam arah sebaliknya, ToolAcre menerima array JSON tingkat atas yang itemnya berupa objek. Itu membangun kolom dari gabungan kunci di setiap objek, dalam urutan yang pertama kali dilihat, sehingga bidang yang diperkenalkan oleh catatan selanjutnya tidak hilang. Properti yang hilang, nol, dan tidak terdefinisi menjadi sel CSV kosong.
Objek atau larik yang disimpan di dalam properti diserialkan sebagai teks JSON di dalam satu sel tersebut. Ini mempertahankan representasi tekstual tetapi tidak mengubah struktur bersarang menjadi kolom atau baris tambahan. Root non-array dan array yang berisi nilai primitif ditolak karena tidak ada yang cocok dengan model tabel yang didukung rute ini.
JSON-to-CSV menerima array objek dan menulis nilai bertingkat sebagai teks JSON
Pertimbangkan nama,aktif,jumlah diikuti dengan Ada,benar,007. Hasil JSON adalah array yang berisi objek dengan nama "Ada", aktif "true" dan dihitung "007". Mengonversi kembali array objek datar tersebut menghasilkan tiga sel tekstual yang sama karena tidak ada inferensi tipe yang menghapus angka nol atau mengonversi kata yang tampak boolean.
Sekarang tambahkan header kosong sebelum nilai lainnya. Kunci JSON menjadi kolom_4, sehingga data tetap dapat dijangkau meskipun nama sumbernya hilang. Namun, tambahkan sel tambahan di luar lebar header, dan pemuat akan memperingatkan tentang baris yang tidak rata; sel berlebih tersebut tidak memiliki kunci dan tidak ada di JSON.
Apa yang tidak tercakup di sini — JSON yang sangat bersarang, validasi skema, dan streaming dokumen JSON yang sangat besar
Rute ini bukan validator skema, perata rekursif, atau prosesor streaming JSON. Ia menerima satu bentuk yang terdokumentasi dan melaporkan JSON yang tidak valid atau akar yang tidak didukung dengan kesalahan tertentu. Catatan yang sangat bertumpuk memerlukan pemetaan yang dirancang berdasarkan domainnya, bukan janji otomatis bahwa tanda baca pada kunci akan menciptakan struktur.
Pemeriksaan file masukan mengizinkan file hingga 50 MB yang dikonfigurasi, dan penguraian CSV terjadi di pekerja. Fakta-fakta tersebut tidak membuktikan streaming: teks file dan baris yang telah selesai masih diwujudkan untuk konversi. Untuk alur kerja JSON yang sangat besar, gunakan sistem yang implementasinya secara eksplisit mendokumentasikan penguraian tambahan daripada menyimpulkannya di sini.
Validasi skema, array primitif, dan akar non-array berada di luar bentuk yang diterima
Konversi adalah serangkaian pilihan yang terlihat: baris pertama sebagai kunci, objek datar sebagai rekaman, dan string sebagai nilai. ToolAcre membuat pilihan tersebut stabil daripada menebak-nebak dari sampel. Header kosong dan berulang menerima kunci deterministik, sementara input acak muncul sebelum nilai lebih yang tidak disebutkan namanya dapat hilang tanpa diketahui.
Gunakan pratinjau untuk mengonfirmasi pembatas dan bentuk baris, menyelesaikan peringatan, lalu mengunduh atau menyalin JSON. File yang dihasilkan cocok untuk kode yang mengetahui skemanya sendiri. Ini sengaja bukan pengganti skema tersebut, dan pengekangannya adalah yang melindungi ID tekstual selama perubahan format.