Seorang engineer DevOps mengekspor konfigurasi Kubernetes sebagai YAML tetapi perlu mengirimnya ke API yang hanya menerima JSON. Seorang analis menerima data respons API dalam JSON tetapi membutuhkannya dalam spreadsheet. Seorang data scientist mengekspor CSV dari database tetapi membutuhkan JSON terstruktur untuk dashboard web.
Konversi format bukan sekadar operasi mekanis. Setiap format membuat trade-off yang berbeda, dan memahami apa yang hilang dalam konversi sama pentingnya dengan mengetahui cara mengonversi.
Tiga format, tiga filosofi
Setiap format dirancang untuk audiens dan masalah yang berbeda:
| Format | Lahir | Dirancang untuk | Filosofi inti |
|---|---|---|---|
| CSV | ~1972 | Pertukaran data antar program | Kesederhanaan maksimal — hanya baris dan kolom |
| JSON | 2001 | Pertukaran data web | Data terstruktur yang mudah dibaca mesin dengan aturan ketat |
| YAML | 2001 | File konfigurasi | Data terstruktur yang mudah dibaca manusia dengan sintaks minimal |
CSV mengasumsikan data Anda adalah tabel datar. Setiap nilai adalah string. Tidak ada konsep nesting, tipe, atau metadata.
JSON mengasumsikan data Anda memiliki struktur — objek, array, tipe (string, angka, boolean, null). Ia ketat dan tidak ambigu, ideal untuk mesin tetapi verbose untuk manusia.
YAML mengasumsikan manusia akan membaca dan mengedit file. Ia menggunakan indentasi alih-alih kurung kurawal, mendukung komentar, dan memiliki sintaks yang lebih longgar. Secara teknis, YAML adalah superset dari JSON — setiap dokumen JSON valid juga merupakan YAML valid.
YAML adalah superset dari JSON Anda bisa menempelkan dokumen JSON langsung ke parser YAML dan itu akan berfungsi. Sebaliknya tidak berlaku — fitur YAML seperti komentar, anchor, dan string multi-baris tidak memiliki padanan JSON.
Skenario konversi dunia nyata
Migrasi konfigurasi (JSON ke YAML, YAML ke JSON)
Ini adalah konversi paling umum. Tool berbeda mengharapkan format konfigurasi berbeda:
- Docker Compose, Kubernetes, GitHub Actions, Ansible menggunakan YAML
- package.json, tsconfig.json, ESLint menggunakan JSON
- Migrasi antar tool sering berarti mengonversi konfigurasi
Konversi ini lossless di kedua arah untuk konten data — tetapi komentar YAML hilang saat mengonversi ke JSON, karena JSON tidak memiliki sintaks komentar.
Analisis data (JSON ke CSV)
Respons API datang dalam JSON. Analis membutuhkan spreadsheet. Konversi ini berfungsi baik untuk array JSON datar — array objek dengan kunci identik memetakan secara alami ke baris dan kolom.
Tetapi rusak dengan data bersarang. Objek JSON dengan field address.city dan array skills tidak memiliki representasi CSV alami. Konverter harus memilih: ratakan kunci bersarang, serialisasi nilai bersarang sebagai string, atau buang.
Impor data (CSV ke JSON)
Skenario sebaliknya: mengimpor data spreadsheet ke aplikasi web atau API. Konversi CSV ke JSON membuat array objek, dengan header kolom sebagai kunci. Masalahnya adalah CSV tidak memiliki informasi tipe — angka 42, string "42", dan boolean true semuanya hanya teks di CSV. Konverter harus menebak tipe.
Keterbacaan manusia (JSON ke YAML)
Kadang Anda hanya perlu membuat file konfigurasi JSON yang padat menjadi mudah dibaca. Mengonversi ke YAML memberikan indentasi bersih dan kemampuan menambah komentar untuk dokumentasi. Ini sangat berharga untuk file konfigurasi besar yang akan dipelihara oleh tim.
Apa yang hilang dalam konversi
Ini adalah pengetahuan kritis yang menghemat waktu debugging:
| Konversi | Apa yang hilang |
|---|---|
| YAML ke JSON | Komentar (JSON tidak punya sintaks komentar) |
| JSON ke CSV | Nesting (CSV datar), tipe (semua jadi teks), array |
| CSV ke JSON | Tidak ada (tapi tipe harus disimpulkan — "42" vs 42) |
| CSV ke YAML | Tidak ada (masalah inferensi tipe yang sama) |
| JSON ke YAML | Tidak ada (YAML superset dari JSON) |
| YAML ke CSV | Komentar, nesting, tipe, anchor/alias |
Polanya jelas: konversi menuju CSV kehilangan paling banyak informasi, karena CSV format paling sederhana. Konversi antara JSON dan YAML hampir lossless. Dan komentar YAML selalu hilang saat meninggalkan YAML.
Dua arah vs satu arah JSON-ke-YAML dan YAML-ke-JSON secara efektif dua arah (aman bolak-balik, kecuali komentar). JSON-ke-CSV dan YAML-ke-CSV satu arah untuk data kompleks — Anda tidak bisa merekonstruksi nesting dari CSV datar.
Jebakan umum saat mengonversi
Jebakan koersi tipe YAML
YAML secara otomatis menginterpretasi string tertentu sebagai tipe non-string. Kata no menjadi boolean false. Kata yes menjadi true. String 1.0 menjadi float. Kode negara seperti NO (Norwegia) terkenal menyebabkan bug. Selalu beri tanda kutip pada nilai ambigu di YAML.
Kebingungan delimiter dan encoding CSV
Tidak semua CSV menggunakan koma. CSV Eropa sering menggunakan titik koma (karena koma adalah pemisah desimal di banyak format angka Eropa). Tab-separated values (TSV) adalah varian lain. Dan ketidakcocokan encoding karakter (UTF-8 vs Latin-1) menghasilkan karakter beraksen yang rusak.
Masalah trailing comma JSON
JSON tidak mengizinkan trailing comma. Ini JavaScript valid: {"a": 1, "b": 2,} — tetapi JSON tidak valid. Satu trailing comma menyebabkan error parsing.
Performa dataset besar
Untuk dataset jutaan baris, CSV jauh lebih efisien dari JSON atau YAML. JSON menambahkan kurung kurawal, bracket, dan tanda kutip untuk setiap nilai. CSV 1 juta baris mungkin 50 MB; JSON equivalennya bisa 150 MB.
Memilih format yang tepat sejak awal
Daripada mengonversi belakangan, memilih format yang tepat dari awal menghindari kehilangan informasi:
- Data tabular untuk spreadsheet atau database — CSV
- Data terstruktur untuk API atau aplikasi web — JSON
- Konfigurasi yang akan diedit manusia — YAML
- Data bersarang kompleks dengan komentar — YAML
- Pertukaran data antar sistem — JSON
Pelajari lebih lanjut
Konversi antara JSON, YAML, dan CSV secara instan dengan alat berbasis browser:
- Konversi Format Data — tempel data Anda, pilih format target, unduh hasilnya
- JSON Formatter — validasi, format, dan minify JSON
- Konverter JSON ke CSV — konversi array JSON ke CSV siap spreadsheet
- Konverter YAML-JSON — konversi antara YAML dan JSON dengan kesadaran komentar
