JSON dan CSV: pindahkan data tanpa kehilangan makna
Konversi berhasil bukan sekadar berkas yang dapat dibuka. Identitas produk harus tetap identitas, harga tetap harga, dan data yang hilang tetap hilang. Kesalahan tipe dan struktur bisa lolos tanpa pesan kesalahan.
Baris datar atau data bertingkat?
CSV cocok untuk tabel baris dan kolom. JSON bisa mewakili nilai bertipe, daftar, dan objek bertingkat. Jika catatan memiliki beberapa alamat atau produk, tentukan cara meratakannya ke kolom sebelum mengekspor CSV. Tidak ada satu bentuk tabel yang benar untuk semua struktur.
Referensi: IETF RFC 8259 — JSON Data Interchange Format · IETF RFC 4180 — Common CSV Format
Pemformatan berbeda dari validasi
Merapikan JSON membuat indentasi mudah dibaca, tetapi tidak membuktikan harga atau tanggal benar. Validasi skema memeriksa tipe yang dinyatakan dan kolom wajib; makna tetap ditentukan oleh aturan aplikasi.
Teks JSON di dalam tanda kutip berbeda dari angka. Dalam CSV, kolom berisi koma atau baris baru perlu diapit tanda kutip yang sesuai; tanda kutip di dalam kolom tersebut ditulis ganda.
Referensi: IETF RFC 8259 — JSON Data Interchange Format · IETF RFC 4180 — Common CSV Format
Pemeriksaan setelah konversi
Simpan sumber asli. Bandingkan jumlah catatan dan nama kolom, lalu periksa satu catatan biasa dan satu lagi dengan nilai kosong, tanda baca, atau teks multibahasa. Buka keluaran pada aplikasi tujuan sebenarnya; konverter tidak menjamin pilihan impor aplikasi itu.
- Simpan identitas seperti 0017 sebagai teks jika nol merupakan bagian dari identitasnya.
- Jangan samakan nilai kosong, null, dan 0 tanpa keputusan yang disengaja.
- Gunakan sampel buatan, bukan kredensial atau catatan pribadi nyata.
- Berhati-hatilah dengan CSV tidak tepercaya di aplikasi lembar kerja; sebagian sel bisa dianggap rumus, bukan teks.
Referensi: OWASP — CSV Injection
Contoh: koma dalam nama produk
Contoh JSON: {"sku":"0017","name":"Buku catatan, biru","price":12.5}. Pada CSV berpemisah koma, apit namanya: 0017,"Buku catatan, biru",12.5.
Saat impor, periksa bahwa sku tetap 0017, bukan 17, dan nama produk tidak terpisah menjadi 2 kolom. Adanya berkas keluaran saja tidak membuktikan kedua hal itu.