Skip to content
jsonforge.app
Kembali ke blog
Panduan9 menit baca

JSON vs XML vs YAML: Memilih Format Data yang Tepat

JSON, XML, dan YAML semuanya bisa mendeskripsikan data yang persis sama — record pengguna, berkas konfigurasi, payload API — tetapi masing-masing dioptimalkan untuk hal yang berbeda. Salah memilih untuk pekerjaan tertentu biasanya baru terasa kemudian, berupa diff konfigurasi yang tak terbaca atau parser yang tak mampu mengekspresikan yang Anda butuhkan. Panduan ini membandingkan ketiganya secara langsung dan memberikan aturan praktis yang konkret untuk masing-masing.

Data yang sama, tiga cara

Berikut satu object kecil yang direpresentasikan dalam ketiga format. Membandingkannya berdampingan adalah cara tercepat melihat apa yang benar-benar ditukar oleh setiap format.

JSON — kurung dan tanda kutip eksplisit, tak ada ambiguitas tentang struktur.
json
{
  "user": {
    "name": "Ada Lovelace",
    "roles": ["admin", "editor"],
    "active": true
  }
}
YAML — data yang sama, memakai indentasi alih-alih kurung.
yaml
user:
  name: Ada Lovelace
  roles:
    - admin
    - editor
  active: true
XML — data yang sama, memakai tag pembuka/penutup dan atribut.
xml
<user active="true">
  <name>Ada Lovelace</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>

Tiga field yang sama, jumlah tanda baca yang sangat berbeda. Perbedaan itulah seluruh ceritanya: JSON paling ramah mesin, YAML paling ramah manusia untuk ditulis tangan, dan XML paling ekspresif ketika dokumennya sendiri butuh struktur di luar data key/value sederhana.

Di mana JSON unggul

JSON menjadi pilihan bawaan bukan tanpa alasan: ia memetakan langsung ke struktur data yang sudah dimiliki setiap bahasa utama (object/dict dan array/list), sehingga parsing-nya bolak-balik ke tipe native tanpa ambiguitas sedikit pun. Ia tak punya komentar, tak ada beberapa cara menulis nilai yang sama, dan tidak sensitif terhadap whitespace — terdengar membatasi, tetapi justru itulah yang membuatnya cepat diurai dan aman dibangkitkan secara programatik.

Gunakan JSON untuk apa pun yang mesin-ke-mesin: payload REST dan GraphQL API, data yang dilewatkan antar-layanan, apa pun yang disimpan di database dokumen (MongoDB, JSONB PostgreSQL), dan konfigurasi apa pun yang terutama dibaca dan ditulis oleh kode, bukan diedit tangan.

Di mana YAML unggul

YAML adalah superset ketat dari model data JSON dengan sintaks yang jauh lebih bersahabat bagi manusia: tanpa closing bracket untuk dihitung, komentar dengan #, dan indentasi alih-alih tanda baca. Itulah yang Anda inginkan untuk berkas yang diedit langsung oleh manusia dan dibaca ulang dalam diff — pipeline CI (GitHub Actions, GitLab CI), manifest Kubernetes, dan konfigurasi aplikasi.

Trade-off-nya, fleksibilitas YAML juga jebakan terbesarnya: kesalahan indentasi diam-diam menghasilkan struktur yang berbeda alih-alih parse error, dan nilai tanpa kutip seperti `no`, `yes`, `on`, dan tanggal bisa otomatis dikonversi menjadi boolean atau timestamp yang tidak Anda maksudkan ('Norway problem' yang terkenal, kode negara NO berubah menjadi boolean false). Beri kutip pada string Anda setiap kali ada ambiguitas.

Di mana XML unggul

XML tampak seperti warisan yang membengkak di samping JSON, tetapi ia bisa melakukan hal yang tak bisa dilakukan JSON maupun YAML: atribut berdampingan dengan konten elemen, mixed content (teks dan elemen berseling, seperti HTML), namespace untuk menggabungkan kosakata dari sumber berbeda, serta validasi schema matang (XSD) dan tooling transformasi (XSLT) yang lebih tua satu dekade dari JSON.

Itulah alasan XML bertahan di ranah yang berorientasi dokumen — API SOAP, SVG, DOCX/XLSX (yang merupakan berkas ZIP berisi XML), dan sistem enterprise (perbankan, kesehatan, pemerintahan) dengan pipeline tervalidasi XSD yang sudah ada dan tidak akan ditulis ulang. Jika data Anda benar-benar berbentuk dokumen (pikirkan 'paragraf dengan span tebal di tengahnya') alih-alih berbentuk record, XML sering kali masih lebih cocok.

Konversi antar-format

Karena ketiganya mendeskripsikan model data object/array/string/number/boolean/null yang sama (atribut dan mixed content XML adalah satu-satunya yang tak terpetakan dengan bersih), konversi antara JSON, YAML, dan XML biasanya bersifat mekanis untuk data berbentuk record. Alat JSON to YAML, YAML to JSON, JSON to XML, dan XML to JSON milik JsonForge menangani konversi di peramban — berguna saat Anda memigrasi format berkas konfigurasi atau perlu menyerahkan ekspor JSON kepada rekan tim yang hanya bisa YAML.

FAQ

Apakah YAML hanya JSON dengan sintaks berbeda?
Hampir — YAML 1.2 adalah superset dari JSON, artinya dokumen JSON valid apa pun juga merupakan YAML valid. Tetapi YAML menambahkan fitur yang tidak dimiliki JSON (komentar, anchor/referensi, berkas multi-dokumen) serta keunikan parsing-nya sendiri (konversi tipe implisit), jadi kebalikannya tidak benar: tidak semua YAML adalah JSON valid.
Mengapa Kubernetes dan alat CI memakai YAML, bukan JSON?
Karena berkas-berkas itu terus-menerus ditulis dan direviu secara manual. Absennya kurung dan dukungan komentar membuat YAML jauh lebih nyaman dibaca dan di-diff dalam pull request daripada JSON yang setara, meskipun JSON akan terurai dengan hasil identik.
Mengapa XML masih ada padahal JSON lebih sederhana?
XML mendukung hal-hal yang secara struktural tidak bisa dilakukan JSON: atribut pada elemen, konten campuran teks/elemen, namespace, dan validasi schema via XSD. Format-format yang dibangun di atas XML — SVG, DOCX, XLSX, SOAP — bergantung persis pada fitur-fitur itu, itulah mengapa XML tidak lenyap meskipun JSON menang untuk REST API pada umumnya.
Apa itu 'Norway problem' pada YAML?
Dalam YAML, `NO` tanpa kutip (kode negara Norwegia) diurai sebagai boolean `false`, karena YAML otomatis mengonversi `no`/`yes`/`on`/`off` tanpa kutip menjadi boolean. Ini gotcha yang terkenal — selalu beri kutip pada kode negara, string versi, dan apa pun yang terlihat seperti boolean atau angka tetapi dimaksudkan sebagai string literal.

Coba alat ini

Artikel terkait