Apa itu konversi JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) adalah format teks ketat yang dibatasi kurung kurawal untuk data terstruktur; YAML (YAML Ain't Markup Language, versi 1.2) adalah superset dari JSON yang menggunakan indentasi, jeda baris, dan sintaks yang dapat dibaca manusia untuk model nilai yang sama. Mengonversi di antara keduanya memungkinkan Anda memutar konfigurasi yang sama antara bentuk ramah-mesin (JSON untuk API, validasi skema, transformasi terprogram) dan bentuk ramah-manusia (YAML untuk peninjauan kode, Kubernetes manifests, GitHub Actions workflows) tanpa mengetik ulang satu kunci pun.
Bagaimana cara kerja konversi JSON ↔ YAML?
Setiap konversi dijalankan lokal di peramban Anda menggunakan pustaka js-yaml bawaan (MIT, versi 4.1.0). Langkah-langkah tingkat tinggi adalah:
- Pemilih mode (Deteksi otomatis / JSON → YAML / YAML → JSON) memutuskan pipeline mana yang berjalan. Pada mode Deteksi otomatis, karakter non-spasi pertama dari masukan memilih arah —
{atau[berarti JSON; selain itu berarti YAML. - JSON → YAML:
JSON.parsememvalidasi masukan dan menghasilkan nilai JavaScript;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })menulis bentuk YAML 1.2. Dengan Multi-dokumen menyala, larik masukan di-dump satu elemen per dokumen dan disatukan dengan pemisah---. - YAML → JSON:
jsyaml.loadAllmengurai setiap dokumen dalam masukan (menangani pemisah---secara otomatis) menjadi larik; masukan dokumen tunggal di-unwrap sehingga keluaran JSON adalah dokumen itu sendiri, bukan larik satu elemen. - Indentasi (2 atau 4 spasi) dan Cetak rapi dapat dikonfigurasi. Cetak rapi mati memancarkan JSON yang diminifikasi melalui
JSON.stringify(value)tanpa spasi sama sekali. - Keluaran ditulis ke textarea hanya-baca. Pada kegagalan parse YAML, pesan kesalahan menyertakan baris dan kolom dengan indeks-1 yang dilaporkan oleh
e.markdarijs-yamlagar Anda bisa langsung melompat ke bug.
Mengapa mengonversi JSON dan YAML dengan alat ini?
- Privasi: setiap proses parse, transform, dan emit terjadi di peramban Anda. Data — termasuk Kubernetes secrets, JWT yang ditandatangani, dan config kepemilikan — tidak pernah mencapai server kami.
- YAML multi-dokumen:
jsyaml.loadAllmengenali pemisah---dan mengembalikan larik dokumen yang di-unwrap konverter untuk kasus satu dokumen atau dipertahankan sebagai larik JSON untuk kasus multi-dokumen. - Anchor dan alias diresolusi: mekanisme
&anchor/*aliasdari YAML ditangani oleh skema defaultjs-yaml. Nilai yang didefinisikan sekali dan direferensikan dua kali round-trip menjadi objek JSON di mana semua referensi memegang nilai yang sama. - Tanpa CDN, tanpa telemetri: pustaka
js-yaml.min.jsdilayani dari origin yang sama dengan halaman, sehingga alat ini bekerja luring, di balik proxy korporat, dan di dalam lingkungan air-gapped.
Apa saja aplikasi umum konversi JSON ↔ YAML?
Memutar antara JSON dan YAML muncul di DevOps, rekayasa platform, dan tooling API:
- Kubernetes manifests: mengonversi YAML
Deployment,ConfigMap, atauHelmReleaseke JSON agar validator kebijakan internal (Joi, Ajv, OPA Rego) dapat lint secara terprogram, lalu kembali ke YAML untuk apply cluster. - Workflow CI/CD: round-trip
workflow.ymlGitHub Actions melalui JSON agar code-generator dapat menulis ulang matriks atau dependensi pekerjaan, lalu memancarkan YAML yang telah dibersihkan untuk PR. - Spec OpenAPI: menempelkan
openapi.jsonJSON dari dokumentasi yang dibuat otomatis oleh backend dan mengonversi keopenapi.yamluntuk referensi yang diedit manusia yang di-check ke repo.
Seperti apa contoh round-trip JSON ↔ YAML?
Menempelkan {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} dan menekan CONVERT pada mode JSON → YAML menghasilkan delapan baris YAML yang diindentasi dengan apiVersion: apps/v1 di baris pertama. Memasukkan YAML itu kembali pada mode YAML → JSON dengan Cetak rapi menyala mengembalikan objek asli byte demi byte setelah JSON.stringify(value, null, 2) yang stabil, dengan urutan kunci dipertahankan karena skema default js-yaml menghormati urutan penyisipan pada kedua arah.
Apakah konverter JSON ↔ YAML ini berjalan sepenuhnya di peramban saya?
Ya. Setiap proses parse, transform, dan emit berjalan secara lokal sebagai JavaScript di dalam tab peramban Anda. Pustaka js-yaml bawaan dilayani dari origin yang sama dengan halaman — tanpa CDN, tanpa fetch, tanpa XMLHttpRequest, tanpa navigator.sendBeacon pada masukan. Alat juga bekerja luring setelah halaman dimuat, karena ini adalah bundel HTML/CSS/JS statis dengan pustaka vendor disalin di sampingnya. Kubernetes secrets, payload JWT, CloudFormation YAML yang ditandatangani, dan config kepemilikan tetap di perangkat Anda.
Bagaimana konverter menangani YAML multi-dokumen?
YAML mendukung beberapa dokumen dalam satu aliran yang dipisahkan oleh baris yang hanya berisi ---. Pada YAML → JSON konverter memanggil jsyaml.loadAll, yang mengembalikan setiap dokumen sebagai nilai JavaScript. Jika tepat satu dokumen ditemukan, keluaran JSON adalah dokumen itu langsung; jika dua atau lebih ditemukan, keluaran JSON adalah larik. Pada JSON → YAML, ketika masukan adalah larik JSON DAN sakelar Multi-dokumen menyala, setiap elemen larik dipancarkan sebagai dokumennya sendiri dengan pemisah --- di antaranya — berguna untuk membuat bundel ramah-kubectl apply dari larik JSON resource.
Apakah anchor dan alias YAML didukung?
Ya — definisi &anchor dan referensi *alias diresolusi oleh skema default js-yaml selama langkah load. Masukan YAML seperti defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d diurai menjadi objek JSON di mana job_a dan job_b keduanya berisi retries: 3, timeout: 30. Kunci merge << (ekstensi YAML 1.1 yang masih dihormati js-yaml) juga didukung pada skema default.
Apakah komentar YAML dipertahankan saat dikonversi ke JSON dan kembali?
Tidak — js-yaml menghapus komentar selama langkah parse, sehingga round-trip YAML → JSON → YAML akan kehilangan setiap baris berawalan #. Ini adalah batasan yang diketahui dari model load/dump; jika pelestarian komentar penting, gunakan pustaka yang sadar-komentar seperti paket npm yaml (yang menyediakan API CST + AST yang dirancang untuk melestarikan trivia) daripada js-yaml. Untuk sebagian besar alur kerja konversi config, trade-off ini dapat diterima: YAML yang round-trip mempertahankan setiap kunci, nilai, anchor, dan alias, hanya tanpa komentar yang ditulis manusia.
Apa yang terjadi pada tag YAML kustom?
Konverter menggunakan DEFAULT_SCHEMA dari js-yaml, yang memahami !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary, dan !!timestamp — setiap tag dalam skema inti YAML 1.2 dan JSON. Tag kustom atau spesifik aplikasi (mis. !Ref di CloudFormation, !vault di Ansible) tidak dikenali dan muncul sebagai kesalahan yang jelas mengutip tag yang tidak didukung. Khusus untuk CloudFormation, gunakan alur aws cloudformation package + --output-template-file untuk memperluas tag kustom sebelum menempelkan ke konverter ini.
Konverter JSON ↔ YAML ini hadir dengan js-yaml@4.1.0 dipaketkan di origin yang sama, mendukung aliran multi-dokumen dan anchor/alias langsung dari kotak, dan melaporkan kesalahan parse YAML dengan baris dan kolom sehingga Anda bisa memperbaiki sumber. Tanpa unggah, tanpa CDN, tanpa telemetri — setiap byte tetap di peramban Anda.