YAML Pemformat & Validator

Tempel YAML untuk memformat dan memvalidasinya. Lihat kesalahan secara instan, perbaiki indentasi, dan konversi ke JSON.

Diproses secara lokal · tidak ada yang dikirim ke server
Tempel YAML untuk memvalidasi

Apa itu YAML?

YAML (YAML Ain't Markup Language) adalah format serialisasi data yang dapat dibaca manusia, digunakan untuk berkas konfigurasi (Docker, Kubernetes, GitHub Actions, Ansible), pertukaran data, dan lainnya. Menggunakan indentasi alih-alih kurung kurawal dan merupakan superset dari JSON.

Pertanyaan yang sering diajukan

Kesalahan apa yang dideteksi validator?

Kesalahan indentasi, titik dua yang hilang, kunci ganda, karakter tidak valid, string yang tidak ditutup, penempatan yang salah, dan masalah sintaks YAML lainnya. Pesan kesalahan menyertakan nomor baris.

Bisakah saya mengonversi YAML ke JSON?

Ya! Klik tombol «→ JSON» untuk mengonversi YAML Anda ke JSON yang diformat dengan baik. Untuk konversi sebaliknya, gunakan JSON ke YAML Konverter kami.

Tur Singkat YAML

YAML 1.0 diterbitkan pada tahun 2001 oleh Clark Evans, Ingy döt Net, dan Oren Ben-Kiki; YAML 1.1 menyusul pada tahun 2005, dan versi saat ini adalah YAML 1.2.2, yang memperbaiki beberapa gotcha historis (terutama «masalah Norwegia», lihat di bawah) dan dirancang sebagai superset ketat dari JSON. Spesifikasi resminya ada di yaml.org/spec/1.2.2. Formatter ini menggunakan pustaka js-yaml open-source, yang mem-parse terhadap skema YAML 1.2 secara default, sehingga sebagian besar keunikan warisan 1.1 tidak berlaku untuk teks yang diformat di sini, tetapi berlaku untuk sebagian besar tooling YAML sisi-server yang akan Anda kirimkan output-nya.

Di Mana YAML Sebenarnya Berada

YAML telah menang sebagai format konfigurasi untuk infrastruktur cloud-native. Tempat-tempat yang paling sering Anda temui:

Jebakan Whitespace (Hanya Spasi)

YAML menggunakan indentasi untuk menandai struktur, dan spesifikasinya tegas bahwa tab tidak diizinkan untuk indentasi. Hanya spasi. Ini adalah sumber bug paling umum dalam YAML yang ditulis tangan, terutama karena banyak editor secara diam-diam mencampur tab dan spasi tergantung pengaturannya. Pesan error yang akan Anda dapatkan dari parser yang ketat kira-kira seperti «found character '\t' that cannot start any token», artinya: «you used a tab somewhere.» Perbaikannya universal: aktifkan «show whitespace» di editor Anda dan konversi setiap tab menjadi dua atau empat spasi.

Ukuran indentasi adalah konvensi, bukan spesifikasi. 2 spasi adalah standar de facto untuk manifest Kubernetes, GitHub Actions, dan sebagian besar YAML yang akan Anda baca di web modern. 4 spasi lebih umum di Ansible. Aturan yang penting: konsistenlah dalam satu file. Mencampur 2 dan 4 spasi di antara kunci saudara itulah yang menjebak parser, bukan ukuran yang Anda pilih.

Masalah Norwegia (dan Mengapa Anda Harus Mengutip String yang Ambigu)

YAML 1.1 (masih default di PyYAML, snakeyaml, dan banyak parser sisi-server lainnya) menginterpretasikan daftar panjang ejaan boolean tanpa tanda kutip sebagai boolean yang sebenarnya: true, True, TRUE, false, False, FALSE, yes, Yes, YES, no, No, NO, y, n, on, off. Jebakan yang terkenal: kode negara ISO untuk Norwegia adalah NO. Konfigurasi YAML yang mencantumkan negara-negara sebagai string tanpa tanda kutip secara diam-diam mem-parse Norwegia sebagai boolean false, dan kode downstream yang membaca countries[0] == 'NO' gagal dengan membingungkan.

YAML 1.2 (dan skema default js-yaml) membatasi boolean hanya menjadi true / false, yang memperbaiki masalah Norwegia pada level parser. Tetapi banyak alat dunia nyata masih default ke skema YAML 1.1 untuk kompatibilitas mundur. Kebiasaan defensif: kutip semua string yang terlihat seperti boolean, angka, tanggal, atau versi. country: "NO", postal_code: "01234", version: "1.10", time: "10:30". Tanda kutip adalah disambiguator universal.

Gotcha Koersi Tipe Lainnya

Gaya Blok vs Gaya Aliran

YAML mendukung dua notasi untuk data yang sama:

# Block style (the standard, indentation-based)
person:
  name: Alice
  tags:
    - admin
    - billing

# Flow style (JSON-like inline)
person: { name: Alice, tags: [admin, billing] }

Gaya blok adalah yang akan Anda lihat di 99% YAML yang ditulis tangan, inilah yang membuat format ini mudah dibaca. Gaya aliran adalah escape hatch yang berguna untuk nilai satu baris yang pendek atau untuk membuat YAML secara programatik di mana Anda lebih suka tidak melacak indentasi. Formatter menormalkan ke gaya blok untuk output (bentuk yang lebih mudah dibaca) terlepas dari gaya mana yang digunakan input Anda.

Jangkar dan Alias (Trik DRY)

Fitur penggunaan ulang YAML: definisikan nilai sekali dengan jangkar &name, referensikan di tempat lain dengan alias *name. Berguna untuk file konfigurasi panjang di mana blok nilai yang sama muncul berkali-kali.

defaults: &defaults
  region: us-east-1
  log_level: info

production:
  <<: *defaults
  log_level: warn   # override

staging:
  <<: *defaults

Beberapa catatan: tidak setiap prosesor YAML mendukung jangkar dan alias (terutama beberapa alat manifest Kubernetes yang lebih lama dan konteks Helm tertentu). Sintaks «merge key» <<: yang ditunjukkan di atas adalah ekstensi YAML 1.1 dan secara resmi tidak digunakan lagi di 1.2; js-yaml mendukungnya, tetapi parser 1.2 murni mungkin tidak.

File Multi-Dokumen

Sebuah file YAML dapat berisi beberapa dokumen, dipisahkan oleh ---. Umum di Kubernetes, satu file dengan sebuah Deployment, sebuah Service, dan sebuah ConfigMap, dipisahkan oleh ---, diterapkan dengan satu kubectl apply -f:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
---
apiVersion: v1
kind: Service
metadata:
  name: app-svc

YAML vs JSON vs TOML

Jika Anda memiliki pilihan untuk konfigurasi baru: TOML untuk konfigurasi flat, YAML jika Anda membutuhkan nesting yang dalam dan ekosistem sudah terstandarisasi dengan YAML (Kubernetes, Ansible), JSON jika mesin yang menulisnya. YAML adalah format yang tepat ketika manusia perlu membaca konfigurasi yang sangat bersarang dan menulis komentar yang bermakna secara inline.

Privasi

Konfigurasi YAML sering kali mengandung rahasia yang tidak seharusnya melewati server orang lain: blob base64 Kubernetes Secret, password database di application.yml, kunci API dalam alur kerja CI, hostname internal dalam konfigurasi deployment. Formatter berjalan sepenuhnya di browser Anda melalui pustaka js-yaml open-source, konten yang ditempel di-parse dan di-emit ulang secara lokal, tanpa fetch / tanpa upload / tanpa logging. Menutup tab menghapus segalanya.

Kesalahan Umum

  1. Mencampur tab dan spasi dalam indentasi. Error paling umum. Tab dilarang oleh spesifikasi; beberapa editor menyisipkannya secara diam-diam. Tampilkan whitespace di editor Anda.
  2. Indentasi yang tidak konsisten di antara saudara. Kunci saudara harus disejajarkan di kolom yang sama. Campuran indentasi 2/4 spasi merusak parse.
  3. Nilai tanpa tanda kutip yang terlihat seperti boolean, angka, tanggal, atau waktu. NO, 012, 1.10, 10:30, yes: kutip semuanya.
  4. Spasi setelah titik dua yang hilang. key: value berfungsi; key:value tidak valid (di-parse sebagai string tunggal).
  5. Whitespace di akhir baris. Beberapa parser memperlakukan spasi di akhir sebagai signifikan; beberapa tidak. Kebiasaan yang aman untuk semua alat adalah menghapus whitespace di akhir.
  6. String multi-baris tanpa blok skalar yang tepat. String panjang membutuhkan | (literal, mempertahankan baris baru) atau > (dilipat, menggabungkan baris). Teks multi-baris biasa tanpa tanda kutip jarang berperilaku seperti yang Anda harapkan.
  7. Jangkar / alias diasumsikan berlaku di mana saja. Helm dan beberapa konteks Kubernetes tidak sepenuhnya mendukung &/*. Uji di pipeline nyata Anda sebelum mengandalkan keduanya.
  8. Ketidakcocokan pengkodean. File YAML harus UTF-8. Editor Windows yang menyimpan sebagai UTF-16 dengan BOM menghasilkan file yang tidak dapat dibaca oleh beberapa parser.

Pertanyaan yang Lebih Sering Diajukan

Apakah formatter akan mempertahankan komentar saya?

Tidak. Pustaka js-yaml mem-parse YAML menjadi nilai JavaScript dan me-emit ulang dari nilai tersebut, yang berarti komentar (# like this) dihapus, komentar tersebut berada di teks sumber, bukan dalam struktur yang di-parse. Jika mempertahankan komentar penting (biasanya begitu untuk file konfigurasi yang dikurasi dengan tangan), gunakan alternatif yang mempertahankan komentar seperti eemeli/yaml melalui CST API-nya, atau lakukan pengeditan kecil dengan tangan daripada round-tripping melalui formatter ini.

Mengapa NO saya diperlakukan sebagai boolean oleh parser YAML server saya?

Karena parser tersebut menggunakan YAML 1.1 (default untuk PyYAML, snakeyaml, dan banyak lainnya), yang menginterpretasikan NO sebagai boolean false. Formatter ini menggunakan YAML 1.2 secara default (melalui js-yaml) sehingga tidak memicu bug di sini, tetapi begitu Anda mengirimkan file ke lingkungan YAML 1.1, jebakan tersebut aktif. Selalu kutip string yang ambigu: country: "NO".

Bisakah saya mengonversi YAML ke JSON?

Ya, klik «→ JSON». Konversi ini lossless untuk semua hal yang dapat direpresentasikan dalam JSON (string, angka, boolean, null, array, objek). Hal-hal yang tidak bertahan: komentar (JSON tidak memiliki sintaks untuk itu), jangkar dan alias (JSON tidak memiliki padanannya), dan tipe tanggal/cap waktu YAML (yang menjadi string di JSON). Untuk arah sebaliknya, gunakan alat JSON to YAML yang khusus.

Apakah ada yang dikirim ke server?

Tidak. Semua parsing, pemformatan, dan konversi JSON berjalan di browser Anda melalui js-yaml. YAML yang ditempel tidak pernah dikirimkan ke server mana pun. Ini penting karena konfigurasi YAML sering kali mengandung rahasia (nilai Kubernetes Secret, password database, kunci API, endpoint internal) yang tidak boleh diunggah ke layanan pihak ketiga.

Berapa batas ukurannya?

Tidak ada batas ketat, formatter berjalan di memori browser Anda. Manifest Kubernetes yang umum (beberapa KB) dan Helm chart (puluhan KB) diformat secara instan. File multi-dokumen yang sangat besar (beberapa MB) bisa lambat tetapi umumnya berfungsi; jika Anda memiliki Helm chart 10 MB, format secara lokal dengan alat CLI sebagai gantinya.

Mengapa YAML begitu rawan error?

Tiga alasan yang saling memperkuat: (1) whitespace yang signifikan berarti kesalahan ketik menyebabkan perubahan semantik yang diam-diam; (2) koersi tipe permisif YAML 1.1 mengubah string ambigu menjadi boolean/angka yang tidak diinginkan; (3) format ini memiliki terlalu banyak cara untuk menulis hal yang sama (blok vs aliran, kutip tunggal vs ganda, tiga jenis string multi-baris). Kebiasaan defensif: selalu kutip, selalu konsisten dengan indentasi, validasi sebelum deploy, mengatasi sebagian besar area permukaan.

Alat terkait