Konversi CSV ke YAML mengubah data tabular berformat koma-terpisah menjadi format YAML (YAML Ain't Markup Language). Setiap baris dalam file CSV menjadi sebuah entri dalam urutan YAML, dan setiap header kolom dipetakan ke kunci dalam pemetaan YAML. Hasilnya adalah dokumen berbasis indentasi yang mudah dibaca manusia, yang dapat diurai langsung oleh alat konfigurasi dan pipeline data tanpa memerlukan file skema tambahan.
YAML pertama kali diusulkan pada tahun 2001 dan mencapai spesifikasi saat ini (YAML 1.2) pada tahun 2009. YAML adalah format konfigurasi bawaan untuk manifes Kubernetes, file Docker Compose, playbook Ansible, alur kerja GitHub Actions, dan banyak sistem CI/CD. Ketika data sumber Anda berada di spreadsheet atau ekspor basis data, mengonversi CSV ke YAML adalah cara tercepat untuk menghasilkan entri konfigurasi, fixture data awal, atau input pengujian untuk sistem-sistem tersebut.
Konverter CSV ke YAML yang benar harus menangani aturan penguraian RFC 4180: kolom yang dikutip yang mengandung koma atau baris baru, tanda kutip ganda yang di-escape, dan pembatas yang bervariasi. Di sisi YAML, string yang menyerupai boolean (yes, no, true, false), angka, atau null harus dikutip agar parser YAML tidak mengonversinya menjadi tipe yang tidak diinginkan. Konverter juga harus menangani konten Unicode dan menghasilkan keluaran UTF-8 yang valid, karena YAML 1.2 mengharuskan UTF-8 sebagai encoding bawaan.
Mengapa Menggunakan Konverter CSV ke YAML?
Menulis YAML secara manual dari data spreadsheet itu membosankan dan rawan kesalahan. Indentasi yang salah atau karakter khusus yang tidak dikutip menghasilkan YAML tidak valid yang merusak deployment konfigurasi atau impor data. Konverter ini mengurai kolom CSV, memetakan header ke kunci, dan menghasilkan keluaran YAML yang diindentasi dengan benar dan dikutip secara tepat.
⚡
Konversi instan di browser
Tempel atau unggah data CSV dan dapatkan keluaran YAML yang valid secara langsung. Tidak perlu menginstal alat CLI, mengimpor pustaka, atau menjalankan langkah build.
🔒
Data Anda tetap privat
Semua penguraian dan konversi berjalan secara lokal di browser Anda menggunakan JavaScript. Data CSV Anda tidak pernah meninggalkan perangkat Anda, tidak pernah dikirim ke server, dan tidak pernah disimpan atau dicatat.
🎯
Menghasilkan YAML berformat benar
Keluaran menggunakan indentasi yang tepat, mengutip string yang akan salah diartikan sebagai boolean atau angka, dan menghasilkan YAML 1.2 yang valid yang lolos dari linter atau validator skema apa pun.
📋
Menangani berbagai dialek CSV
Mendeteksi otomatis koma, titik koma, tab, dan pipa sebagai pembatas. Mendukung aturan pengapit RFC 4180 termasuk tanda kutip ganda yang di-escape, kolom multiline, dan file UTF-8 dengan BOM.
Kasus Penggunaan CSV ke YAML
Konfigurasi Kubernetes dan Docker Compose
Buat blok variabel lingkungan, bagian data ConfigMap, atau definisi layanan Docker Compose dari spreadsheet nilai konfigurasi. Tempel langsung keluaran YAML ke dalam file manifes Anda.
Data playbook Ansible
Konversi inventaris CSV berisi host, role, dan variabel menjadi file variabel berformat YAML (group_vars, host_vars) yang dibaca langsung oleh Ansible tanpa plugin penguraian khusus.
Konfigurasi pipeline CI/CD
Ubah spreadsheet entri matriks build, variabel lingkungan, atau target deployment menjadi blok konfigurasi YAML untuk GitHub Actions, GitLab CI, atau CircleCI. Menghindari pengetikan manual definisi matriks yang berulang.
Fixture data awal basis data
Rails, Django, dan framework lainnya menggunakan YAML untuk fixture pengujian dan data awal. Konversi ekspor CSV basis data menjadi file fixture YAML yang dapat dimuat langsung oleh ORM ke basis data pengujian.
Transformasi pipeline data
Pipeline ETL yang menerima input YAML dapat menyerap data CSV yang telah dikonversi tanpa langkah JSON perantara. Alat seperti dbt, Dagster, dan Prefect menggunakan YAML untuk definisi pipeline dan konfigurasi.
Belajar sintaks YAML
Mahasiswa dan pengembang yang baru mengenal YAML dapat menempelkan data CSV yang sudah familiar dan melihat bagaimana baris tabular diterjemahkan menjadi urutan dan pemetaan. Membandingkan input dan output memperjelas aturan indentasi, sintaks kunci-nilai, dan penanganan tipe.
Referensi Pemetaan CSV ke YAML
Setiap elemen struktural dalam file CSV memiliki padanan langsung dalam YAML.
Konsep CSV
Padanan YAML
Detail
CSV file
YAML document
The entire file becomes a YAML sequence (array) of mappings
Header row
Mapping keys
Each column header becomes a key in every mapping entry
Data row
Sequence item (- ...)
Each row becomes one mapping item in the top-level array
Cell value
Scalar value
Strings, numbers, and booleans are inferred by YAML parsers
Empty cell
null or empty string
Rendered as null, ~, or an empty value depending on the tool
Comma delimiter
Indentation + colon
CSV delimiters are replaced by YAML key: value structure
CSV vs YAML
CSV adalah format flat berpisah pembatas tanpa informasi tipe atau hierarki. YAML adalah superset dari JSON yang menggunakan indentasi untuk nesting, mendukung berbagai tipe data, dan memungkinkan komentar. Pilihan bergantung pada apa yang diharapkan oleh alat hilir Anda.
CSV
Teks biasa, satu record per baris. Setiap nilai berupa string. Tidak ada hierarki, nesting, atau komentar. Ukuran file minimal. Didukung secara universal oleh spreadsheet, basis data, dan alat baris perintah. Didefinisikan oleh RFC 4180. Terbaik untuk transfer data tabular massal antar sistem yang sepakat tentang urutan kolom dan tipe.
YAML
Format berbasis indentasi dengan dukungan native untuk string, integer, float, boolean, null, tanggal, urutan (array), dan pemetaan (objek). Memungkinkan komentar inline dengan #. Digunakan sebagai format konfigurasi utama untuk Kubernetes, Docker Compose, Ansible, GitHub Actions, dan sebagian besar alat DevOps modern. YAML 1.2 adalah superset dari JSON, sehingga JSON yang valid juga merupakan YAML yang valid.
Contoh Kode
Contoh yang berfungsi dalam Node.js, Python, Go, dan alat CLI. Masing-masing membaca baris header CSV sebagai kunci YAML, memetakan setiap baris data ke entri urutan, dan menangani pengutipan untuk nilai yang ambigu tipenya.
JavaScript (Node.js)
import { parse } from 'csv-parse/sync'
import { stringify } from 'yaml'
const csv = `name,age,city
Alice,30,Berlin
Bob,25,"New York"`
const records = parse(csv, { columns: true, skip_empty_lines: true })
console.log(stringify(records))
// → - name: Alice
// → age: "30"
// → city: Berlin
// → - name: Bob
// → age: "25"
// → city: New York
// Vanilla JS (no dependencies)
function csvToYaml(csv) {
const [headerLine, ...dataLines] = csv.trim().split('\n')
const headers = headerLine.split(',')
return dataLines.map(line => {
const values = line.split(',')
return headers.map((h, i) => ` ${h}: ${values[i] || ''}`).join('\n')
}).map(block => `- ${block.trimStart()}`).join('\n')
}
Python
import csv, io, yaml
csv_string = """name,age,city
Alice,30,Berlin
Bob,25,New York"""
reader = csv.DictReader(io.StringIO(csv_string))
data = list(reader)
# default_flow_style=False produces block-style YAML
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
# → - age: '30'
# → city: Berlin
# → name: Alice
# → - age: '25'
# → city: New York
# → name: Bob
# Preserve insertion order with sort_keys=False (Python 3.7+)
# To type-cast numbers: data = [{k: int(v) if v.isdigit() else v ...}]
Go
package main
import (
"encoding/csv"
"fmt"
"gopkg.in/yaml.v3"
"strings"
)
func main() {
input := "name,age,city
Alice,30,Berlin
Bob,25,New York"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
headers := records[0]
var data []map[string]string
for _, row := range records[1:] {
entry := make(map[string]string)
for i, h := range headers {
entry[h] = row[i]
}
data = append(data, entry)
}
out, _ := yaml.Marshal(data)
fmt.Println(string(out))
// → - age: "30"
// → city: Berlin
// → name: Alice
// → - age: "25"
// → city: New York
// → name: Bob
}
CLI (yq / Miller)
# Using yq (https://github.com/mikefarah/yq)
# yq reads CSV with --input-format=csv
yq --input-format=csv --output-format=yaml '.' data.csv
# Using Miller (mlr) — converts between CSV, JSON, YAML, and more
mlr --icsv --oyaml cat data.csv
# Python one-liner for quick conversion
python3 -c "
import csv, sys, yaml
data = list(csv.DictReader(sys.stdin))
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
" < data.csv
Pertanyaan yang Sering Diajukan
Bagaimana cara kerja konversi CSV ke YAML?
Konverter membaca baris pertama sebagai header kolom. Setiap baris berikutnya menjadi pemetaan YAML (objek kunci-nilai), dan semua pemetaan dikumpulkan menjadi urutan YAML (array). Hasilnya adalah daftar objek di mana setiap kunci berasal dari header dan setiap nilai berasal dari isi sel.
Apa yang terjadi pada nilai seperti "true", "yes", atau "null" dalam CSV saya?
Parser YAML menginterpretasikan true, false, yes, no, dan null tanpa kutipan sebagai nilai bertipe, bukan string. Konverter mengutip nilai-nilai ini agar tetap berupa string dalam keluaran. Misalnya, sel CSV yang berisi "yes" menjadi '"yes"' dalam keluaran YAML, mencegah alat konfigurasi Anda menginterpretasikannya sebagai boolean.
Bisakah saya mengonversi YAML kembali ke CSV?
Ya, selama YAML adalah urutan flat dari pemetaan (array objek dengan nilai skalar). Struktur YAML bersarang dengan peta yang sangat dalam atau tipe campuran tidak dapat direpresentasikan dengan bersih sebagai baris CSV. Untuk struktur flat, alat seperti yq, Miller (mlr), atau modul yaml dan csv Python menangani konversi balik.
Apa perbedaan antara CSV ke YAML dan CSV ke JSON?
Keduanya menghasilkan data terstruktur dari input CSV flat. JSON menggunakan kurung kurawal dan tanda kurung dengan aturan pengutipan yang ketat. YAML menggunakan indentasi dan titik dua, mendukung komentar, dan lebih mudah dibaca serta diedit secara manual. Sebagian besar alat DevOps (Kubernetes, Ansible, Docker Compose) mengharapkan YAML. Sebagian besar web API dan alat berbasis JavaScript mengharapkan JSON.
Bagaimana angka dan tanggal ditangani dalam keluaran?
CSV memperlakukan setiap nilai sebagai string. Parser YAML akan mendeteksi otomatis angka tanpa kutipan (42, 3.14) dan tanggal ISO (2024-01-15) sebagai tipe masing-masing. Jika Anda ingin semua nilai tetap berupa string, konverter dapat mengutip setiap nilai. Jika Anda menginginkan inferensi tipe, biarkan nilai tanpa kutipan dan biarkan parser YAML menangani resolusi tipe.
Alat ini berjalan sepenuhnya di browser Anda, sehingga performa bergantung pada memori yang tersedia dan batas tab browser. File hingga beberapa megabyte (puluhan ribu baris) dapat dikonversi tanpa masalah pada perangkat modern. Untuk file yang sangat besar (100 MB ke atas), gunakan alat CLI seperti modul csv dan yaml Python, Go dengan encoding/csv dan gopkg.in/yaml.v3, atau Miller (mlr), yang dapat melakukan streaming data tanpa memuat semuanya ke memori.
Apakah keluaran berupa YAML 1.1 atau YAML 1.2?
Alat ini menghasilkan keluaran YAML 1.2. Perbedaan utama dari YAML 1.1 adalah bahwa 1.2 menghapus "masalah Norwegia" (bare 'no' diinterpretasikan sebagai boolean false) dan menyelaraskan kompatibilitasnya dengan JSON. Sebagian besar parser modern (Go yaml.v3, Python PyYAML dengan safe_load, Ruby Psych) mendukung YAML 1.2. Jika alat Anda membutuhkan kompatibilitas 1.1, keluaran ini tetap akan diurai dengan benar di hampir semua kasus karena 1.2 kompatibel mundur untuk struktur umum.