Ubah YAML ke JSON dan Sebaliknya
Ubah file YAML ke JSON atau JSON ke YAML secara instan — alat gratis untuk developer.
Berkas Anda tetap di perangkat
Tidak ada yang perlu dihapus kemudian
Aman untuk berkas pipeline dan secret
Jalan di semua browser modern
Cara kerjanya
- 1
Tempel YAML atau JSON
Definisi pipeline, manifes Kubernetes, berkas compose, berkas bahasa, atau muatan sebuah API.
- 2
Baca peringatannya
Nilai yang ditipe-ulang, komentar yang hilang, dan kunci ganda didaftar sebelum Anda membawa keluarannya.
- 3
Salin hasilnya
Bawa ke sebuah repositori, badan permintaan, berkas konfigurasi, atau data uji.
Mengapa memakai alat ini
Tipe terkaan ditandai
Tiap nilai tanpa tanda kutip yang akan dibaca YAML sebagai boolean, angka, atau tanggal ditunjukkan sebelum konversi.
Masalah Norwegia tertangkap
NO telanjang jauh lebih sering berupa kode negara ketimbang kata salah, dan Anda diberi tahu mana yang Anda dapat.
Nol depan selamat
Nomor telepon, kode pos, dan nomor identitas menyimpan nol yang akan dilahap penafsiran oktal.
Kehilangan komentar dilaporkan
JSON tak punya komentar, jadi Anda diberi tahu berapa yang akan lenyap alih-alih menemukannya saat peninjauan.
Jangkar dan alias dijelaskan
Simpul bersama dibentangkan dalam perjalanan ke JSON, dan bentangannya ditampilkan — tak ada yang berubah diam-diam.
Tak ada yang meninggalkan browser
Berkas pipeline, manifes, dan playbook dikonversi di halaman ini dan tak diunggah ke mana pun.
YAML menerka apa maksud nilai Anda, dan terkaannya punya korban yang termasyhur
JSON meminta Anda menyatakan sebuah nilai itu apa: tanda kutip membuat string, angka telanjang membuat bilangan, dan tak ada yang ambigu. YAML justru menyimpulkan, dan penyimpulan itu adalah sumber kejutan terbesar dalam format ini. Kasus yang paling termasyhur bahkan punya nama — masalah Norwegia. Tulis sebuah daftar kode negara, dan entri `NO` tak tiba sebagai string yang diharapkan Norwegia; menurut kaidah YAML 1.1 ia tiba sebagai boolean salah, karena spesifikasinya mendaftar `y`, `yes`, `n`, `no`, `on`, `off`, `true`, dan `false` dalam segala kapitalisasi sebagai literal boolean. Kaidah yang sama mengubah `ON` milik Ontario menjadi benar, mengubah satu kolom jawaban `Y` dan `N` menjadi boolean, dan mengubah `NO` pada sebuah himpunan data kimia menjadi salah. Ia bertambah buruk karena para pengurai tak sepakat: YAML 1.2 menyempitkan daftarnya hanya menjadi `true` dan `false`, tetapi banyak sekali perangkat lunak masih menjalankan 1.1 atau sesuatu di antaranya, sehingga berkas yang sama bermakna berbeda di Python, di Go, dan di Ruby. Perbaikannya satu karakter tanda kutip, dan bagian sukarnya adalah mengetahui di mana Anda memerlukannya. Untuk itulah peringatan di sini ada.
Nomor telepon Indonesia selalu diawali nol, dan nol itulah persoalannya
Keluarga kejutan kedua lebih senyap daripada yang pertama, sebab ia menghasilkan sebuah nilai alih-alih sebuah galat — dan tim yang bekerja dengan data Indonesia berjumpa keluarga ini nyaris di tiap berkas. Nol di depan punya makna pada YAML 1.1: `0755` itu oktal dan bernilai 493, yang benar bila yang Anda maksud izin berkas dan keliru pada tiap kasus lain. Di Indonesia semua nomor ponsel dimulai dengan `08`, jadi sebuah nomor tanpa tanda kutip berhenti menjadi teks yang Anda tulis. Di sini persoalannya justru berlipat: sistem oktal tak mengenal angka 8 dan 9, sehingga `0812` bukan oktal yang sah sama sekali — sebagian pengurai melempar galat, sebagian diam-diam mundur menjadi string, jadi berkas yang sama termuat mulus di satu mesin dan meledak di mesin lain. NIK enam belas digit, nomor rekening berdigit nol depan, dan kode pos semuanya kena hal yang sama. Nomor versi rusak dengan cara berbeda: `1.10` itu bilangan desimal, dan desimal tak menyimpan nol di belakang, jadi nilainya kembali sebagai 1.1 dan pengunci dependensi Anda kini menunjuk rilis yang lain. Kaidahnya sederhana: kalau Anda tak akan menghitungnya, itu teks, dan teks memakai tanda kutip.
Kosong, tilde, dan null bukanlah tiga hal yang berbeda
Ada satu keluarga kejutan lagi yang jarang disebut dan sering menggigit di formulir dan berkas konfigurasi. YAML memperlakukan kunci tanpa nilai, tanda `~`, dan kata `null` dalam segala kapitalisasi sebagai hal yang sama persis: null. Artinya `catatan:` yang dibiarkan kosong tak menyimpan string kosong seperti yang dikira banyak orang — ia menyimpan null, dan kedua hal itu berperilaku berbeda di hampir setiap bahasa. Sebuah bidang opsional yang dikosongkan pengguna karena tak ada yang ingin ditulis tiba di aplikasi Anda sebagai null, lalu penjumlahan panjang teks atau pemanggilan metode string padanya gagal di tempat yang jauh dari sumbernya. Untuk memperoleh string kosong yang sungguhan Anda harus menulisnya secara tegas dengan dua tanda kutip. Ada cerminnya juga: kata `null` yang Anda maksudkan sebagai teks — misalnya sebuah nilai bawaan yang memang berbunyi demikian — berhenti menjadi teks kecuali dikutip. Dan karena JSON membedakan `null` dari `""` dengan tegas, konversi ke JSON adalah cara tercepat melihat bidang mana yang sebenarnya kosong dan mana yang sebenarnya null.
Konversi ke JSON kehilangan sesuatu, dan komentarlah yang akan Anda rindukan
YAML kerap digambarkan sebagai himpunan super dari JSON, dan untuk data itu nyaris benar — tetapi hanya untuk data. Fitur yang ditambahkan YAML tak selamat dari perjalanan pulang pergi. Komentar adalah kehilangan yang paling kentara sekaligus paling menyakitkan: sebuah manifes Kubernetes, pipeline CI, atau playbook Ansible lazimnya separuhnya berupa penjelasan, dan satu perjalanan lewat JSON menghapus tiap barisnya tanpa suara — begitulah seorang peninjau berakhir menatap konfigurasi yang alasannya sudah menguap. Jangkar dan alias adalah kehilangan kedua. YAML membolehkan Anda mendefinisikan sebuah simpul sekali dengan `&defaults`, merujuknya dengan `*defaults`, dan menggabungkannya ke pemetaan lain lewat kunci penggabungan; JSON tak punya konsep semacam itu, jadi konversinya harus membentangkan tiap rujukan menjadi salinan. Dokumennya tetap bermakna sama, tetapi definisi bersamanya lenyap, dan suntingan mendatang yang dimaksudkan mengubah lima tempat kini hanya mengubah satu. YAML juga membolehkan beberapa dokumen dalam satu arus, serta kunci yang bukan string — tak satu pun punya padanan di JSON. Alat ini melaporkan tiap hal ini alih-alih melakukannya diam-diam.
Pengurai YAML bisa disuruh membangun objek, dan itu adalah celah eksekusi kode
Inilah sifat keamanan yang memisahkan YAML dari JSON, dan layak dinyatakan terus terang karena bawaannya secara historis memang keliru. YAML mendukung tag yang memberi tahu pengurai tipe apa yang harus dibangun, dan beberapa pengikat bahasa menerapkannya secara harfiah: sebuah dokumen berisi `!!python/object/apply:os.system` memerintahkan pemuat yang naif memanggil fungsi itu dengan argumen yang Anda sodorkan. Di PyYAML, fungsi bernama `load` melakukan persis itu selama bertahun-tahun sementara `safe_load` tidak, yang berarti membaca sebuah berkas konfigurasi dengan fungsi yang namanya paling kentara adalah eksekusi kode jarak jauh bila penyerang dapat memengaruhi berkasnya. Kelas bug yang sama muncul di Ruby, di Java lewat SnakeYAML, dan di pengurai-balik .NET. Pelajarannya melampaui YAML: format apa pun yang bisa menjelaskan kelas mana yang harus diinstansiasi adalah format kode, bukan format data, dan masukan tak tepercaya harus melewati pemuat yang dibatasi pada nilai sederhana, deret, dan pemetaan. Alat ini tak membangun apa pun sama sekali — ia mengurai menjadi data polos lalu berhenti di situ.
Di YAML-lah kredensial bermukim, dan itulah alasan mengonversi secara lokal
Lihat apa yang sungguh-sungguh ditulis dalam YAML, maka alasan menyimpannya di mesin Anda menyusun dirinya sendiri. Ia adalah format infrastruktur: pipeline integrasi berkelanjutan, manifes dan secret Kubernetes, nilai Helm, berkas docker-compose, playbook dan inventaris Ansible, berkas variabel Terraform, definisi layanan. Sebuah konfigurasi CI adalah, di sebagian besar repositori, berkas dengan kepadatan kredensial tertinggi yang ada — ia menyebut registri, sasaran penggelaran, dan lingkungan, serta biasanya merujuk token dengan nama variabel persis yang membukanya. Sebuah Secret Kubernetes itu base64, bukan terenkripsi, artinya teks polos dengan satu langkah tambahan. Dan orang meraih pengonversi justru ketika salah satu berkas itu gagal dan perlu diperiksa, jadi contoh di papan klip adalah contoh sungguhan, bukan sampel yang disensor. Semua yang ada di halaman ini berjalan sebagai JavaScript di browser Anda dan tak mengeluarkan satu permintaan pun; buka panel jaringan pada developer tools Anda sebelum menempel, dan Anda akan melihat pencacahnya diam di tempat.
Kesalahan umum yang sebaiknya dihindari
- Membiarkan kode negara atau singkatan tanpa tanda kutip. Menurut kaidah YAML 1.1, `NO`, `ON`, `Y`, dan `N` adalah literal boolean, jadi Norwegia menjadi salah dan Ontario menjadi benar.
- Menulis nomor telepon tanpa tanda kutip. Semua nomor Indonesia diawali `08`, dan nol depan berarti oktal — padahal oktal tak mengenal angka 8, jadi pengurai berbeda-beda menanganinya.
- Mengira kunci kosong menyimpan string kosong. Ia menyimpan null, dan untuk memperoleh string kosong sungguhan Anda harus menulis dua tanda kutip secara tegas.
- Mengindentasi dengan karakter tab. Tab dilarang sebagai indentasi di mana pun dalam YAML, dan pesan galatnya takkan memberi tahu Anda karena karakternya tak kasatmata.
- Memuat YAML tak tepercaya dengan pemuat yang permisif. Tag bisa menyebut kelas yang harus dibangun — begitulah membaca berkas konfigurasi menjadi eksekusi kode jarak jauh di PyYAML dan SnakeYAML.
Perbandingan
| Aspek | Alat ini | Pengonversi daring | Sebuah alat baris perintah |
|---|---|---|---|
| Berkas dikirim ke server | Tidak pernah | Umumnya ya | Tidak |
| Memperingatkan tipe terkaan | Ya | Tidak | Jarang |
| Melaporkan komentar yang akan hilang | Ya | Tidak | Tidak |
| Mendeteksi kunci ganda | Ya | Jarang | Beragam |
| Membangun objek dari tag | Tidak pernah | Beragam | Tergantung pemuatnya |
| Harga | Gratis | Gratis / paket berbayar | Gratis |
Fitur
Dua arah
YAML ke JSON dan JSON ke YAML, dengan indentasi dan gaya tanda kutip di tangan Anda.
Peringatan pemaksaan tipe
Tiap nilai bertipe implisit didaftar berikut nilai yang dibaca YAML dan nilai yang mungkin Anda maksud.
Deteksi kunci ganda
Kunci berulang menimpa secara diam-diam pada sebagian besar pengurai, jadi ia dilaporkan alih-alih diterapkan.
Arus banyak dokumen
Dokumen yang dipisahkan tiga tanda hubung ditangani dan dipetakan ke larik JSON alih-alih dibuang.
Pembentangan jangkar dan alias
Simpul bersama dan tergabung diselesaikan dengan bentangannya terlihat, termasuk kunci penggabungan.
Berkas besar didukung
Manifes panjang atau berkas terjemahan utuh terkonversi tanpa unggahan maupun plafon ukuran.
Tanpa instalasi
Tanpa alat build, tanpa runtime, tanpa dependensi — jalan di halaman web.
Ramah Arab dan RTL
Antarmuka lengkap dalam delapan bahasa, termasuk Arab kanan-ke-kiri.
Aman secara bawaan
Disajikan lewat HTTPS, tanpa pelacakan konten dan tanpa unggahan ke pihak ketiga.
Siapa yang memakainya
Insinyur platform dan DevOps
Memeriksa apa sebenarnya yang dikatakan sebuah manifes setelah jangkarnya dibentangkan.
Pengembang backend
Mengubah muatan JSON menjadi berkas konfigurasi yang terbaca, atau sebaliknya.
Tim pelokalan
Memindahkan berkas terjemahan antara kerangka kerja berbasis YAML dan yang berbasis JSON.
Siapa pun yang melacak galat pipeline
Menemukan nilai tanpa tanda kutip yang dibaca pengurai sebagai boolean.
Pertanyaan yang Sering Diajukan
Tidak. Semuanya berjalan lokal di browser Anda — teks Anda tidak pernah diunggah, disimpan, atau dibagikan.
Ya — sepenuhnya gratis, tanpa akun dan tanpa batas.