JSON, CSV, dan XML sama-sama dapat memindahkan data, tetapi masing-masing membawa asumsi berbeda. JSON nyaman untuk object bertingkat, CSV efisien untuk tabel sederhana, dan XML kuat untuk dokumen berstruktur serta ekosistem schema. Format terbaik adalah yang menjaga makna dengan kompleksitas paling rendah bagi kedua pihak.
Apa karakter utama setiap format?
JSON memiliki object, array, string, number, boolean, dan null. RFC 8259 mendefinisikan format serta menyarankan UTF-8 untuk pertukaran terbuka. CSV mewakili baris dan kolom; RFC 4180 mendokumentasikan format umum, tetapi praktik delimiter dan encoding tetap bervariasi.
XML memiliki elemen, atribut, namespace, dan schema yang kaya. XML 1.0 Fifth Edition adalah rekomendasi W3C. Kekuatan ini bermanfaat untuk dokumen kompleks, tetapi parser dan kebijakan keamanan harus dikonfigurasi dengan benar.
Bagaimana ketiganya dibandingkan?
| Aspek | JSON | CSV | XML |
|---|---|---|---|
| Nested data | Natural | Perlu flattening | Natural |
| Tipe bawaan | Terbatas tetapi eksplisit | Semua tampak teks tanpa schema | Melalui schema |
| Overhead | Sedang | Rendah | Lebih tinggi |
| Human editing | Mudah untuk ukuran kecil | Mudah sebagai tabel | Verbose tetapi eksplisit |
| Ekosistem dokumen | API modern | Import/export massal | Dokumen dan standar enterprise |
Bagaimana menjaga makna dan tipe data?
CSV tidak mengetahui apakah 00123 adalah string kode atau integer 123. Spreadsheet dapat mengubah tanggal, angka panjang, dan notasi ilmiah. JSON memiliki number tetapi tidak menjamin precision yang sama pada semua runtime. XML schema dapat menyatakan tipe, namun consumer tetap harus memvalidasi dan memahami semantik.
Kontrak perlu menentukan encoding, delimiter dan quoting untuk CSV, timezone dan format tanggal, precision decimal, null versus kosong, serta urutan. Gunakan panduan tipe data antar-database dan jangan mengandalkan parser default.
Risiko keamanan parser apa yang perlu diperiksa?
Batasi ukuran, kedalaman nesting, jumlah kolom, panjang field, dan waktu parsing. Jangan memakai eval untuk JSON. Untuk XML, nonaktifkan kemampuan eksternal yang tidak diperlukan dan gunakan parser terawat agar referensi eksternal tidak menjadi jalur akses. Untuk CSV yang dibuka spreadsheet, waspadai nilai yang ditafsirkan sebagai formula.
Parser dapat menerima file yang sangat besar, enum salah, tanggal mustahil, atau jumlah negatif. Validasi kontrak dan aturan domain tetap diperlukan.
Seperti apa contoh keputusan yang baik?
API order dengan item bertingkat cocok memakai JSON. Ekspor bulanan jutaan baris dengan kolom tetap dapat memakai CSV terkompresi dan manifest yang mencatat schema serta checksum. Dokumen pajak yang mengikuti standar XML sebaiknya mempertahankan XML agar validasi dan signature ekosistem tidak hilang karena konversi.
Jika format berbeda antar-pihak, tentukan siapa bertanggung jawab melakukan transformasi dan bagaimana kehilangan informasi dideteksi. Hubungkan dengan canonical data model bila banyak sistem memakai konsep bersama.
Apa yang harus tertulis dalam kontrak format?
- Media type, encoding, dan versi format.
- Schema, required field, null, dan nilai kosong.
- Ukuran maksimum, kompresi, serta pemecahan file.
- Aturan angka, tanggal, timezone, dan Unicode.
- Perilaku record rusak: tolak semua atau karantina baris.
- Checksum, penamaan, dan bukti kelengkapan.
NitroNet atau platform integrasi lain dapat membantu transformasi data, tetapi artikel ini tidak mengklaim dukungan parser tertentu. Uji dengan sample representatif serta contract test sebelum memilih format production.
Buat dataset order berisi item bertingkat, decimal, Unicode, null, string berkode nol di depan, dan timestamp berzona. Serialisasikan ke JSON, CSV, serta XML lalu minta consumer memulihkan makna asli. Selisih akan menunjukkan biaya format lebih jelas daripada diskusi abstrak.
- Pastikan kode 00123 tidak berubah menjadi angka 123 saat melewati CSV atau spreadsheet.
- Uji decimal bernilai besar pada runtime JSON yang memakai representasi number berbeda.
- Tentukan cara array item di-flatten ke CSV dan bagaimana relasi parent dipertahankan.
- Validasi karakter Unicode, line break, delimiter, quote, serta encoding pada file.
- Uji null, string kosong, field tidak ada, dan element kosong sebagai empat keadaan berbeda.
- Batasi nesting dan ukuran untuk mencegah parser menghabiskan memory atau waktu berlebihan.
- Uji nilai CSV yang diawali karakter formula ketika file dibuka melalui spreadsheet.
- Bandingkan ukuran terkompresi, waktu parsing, pesan error, dan kemudahan diagnosis operator.
Pilih format yang mempertahankan kontrak dengan operasi paling sederhana bagi kedua pihak. Bila transformasi diperlukan, simpan manifest, schema, serta bukti jumlah record. Jangan mengubah format standar domain hanya untuk menyeragamkan teknologi jika validasi, tanda tangan, atau tooling penting akan hilang.
Buat file uji yang sengaja memuat karakter non-ASCII, baris baru dalam teks, nilai kosong, null, angka sangat besar, decimal presisi, tanggal dengan zona waktu, serta struktur berulang. Proses pada producer dan consumer yang sebenarnya, kemudian bandingkan nilai semantik—bukan hanya ukuran file. Untuk CSV, sepakati delimiter, quoting, header, dan encoding. Untuk JSON, batasi asumsi tentang urutan properti. Untuk XML, pertahankan namespace serta schema. Catat pula kompresi, checksum, dan ukuran maksimum agar operasi produksi dapat diprediksi.