YAML Çıktısı
Örnek JSON’u dönüştürmek şu çıktıyı üretir:
server:
host: 0.0.0.0
port: 8080
ssl: true
database:
url: postgresql://localhost:5432/myapp
pool_size: 10
timeout: 30
logging:
level: info
format: json
outputs:
- stdout
- file
İç içe yapı doğrudan YAML’ın girinti hiyerarşisine dönüşür. Integer ve boolean değerler kendi türlerinde kalır. Diziler, her öğe için - ön ekiyle YAML dizilerine dönüşür.
JSON’un YAML’a Nasıl Eşlendiği
YAML ve JSON aynı veri modelini temsil eder: stringler, sayılar, booleanlar, null, diziler ve nesneler. Sözdizimi farklılıkları kozmetiktir ancak okunabilirlik için önemlidir.
| JSON | YAML |
|---|---|
{ "key": "value" } | key: value |
{ "key": 42 } | key: 42 |
{ "key": true } | key: true |
{ "key": null } | key: null |
["a", "b"] | - a\n- b |
| İç içe nesne | Girintili blok |
JSON, tüm string anahtarlar ve çoğu string değer için tırnak işareti gerektirir. YAML, değer belirsiz olmadığı sürece (sayılar, booleanlar, özel karakterler) tırnaksız stringlere izin verir. YAML’ın “Norveç sorunu” burada ortaya çıkar: NO ülke kodu, YAML 1.1 ayrıştırıcıları tarafından boolean false olarak ayrıştırılır. Boolean veya sayı gibi görünen stringleri her zaman tırnak içine alın.
YAML Ne Zaman Kullanılır
YAML, insanların doğrudan yapılandırma dosyalarını düzenlediği yerlerde karşımıza çıkar:
Kubernetes ve Helm
Her Kubernetes kaynağı YAML ile tanımlanır. kubectl apply -f deployment.yaml standart iş akışıdır. Helm chart değer dosyaları YAML’dır. Girinti hiyerarşisi, Kubernetes’in iç içe spec yapısına temiz bir şekilde eşlenir.
Docker Compose
docker-compose.yml servis tanımları, volume mountlar, port eşlemeleri ve ortam değişkenleri için YAML kullanır. Yorum desteği, belirli bir port veya volume yolunun neden seçildiğini belgelemek için özellikle kullanışlıdır.
GitHub Actions
.github/workflows/ dizinindeki iş akışı dosyaları YAML’dır. Çok satırlı string desteği (| literal blok için, > folded blok için), run: adımlarındaki inline shell scriptleri için kullanışlıdır.
Ansible
Ansible playbook ve envanter dosyaları YAML’dır. Liste sözdizimi doğrudan Ansible’ın görev listelerine eşlenir.
JSON Ne Zaman Kullanılır
JSON, makine tarafından oluşturulan veya tüketilen yapılandırmalar için daha iyidir:
package.jsonvepackage-lock.json: araçlar bunları oluşturur ve okurtsconfig.json: TypeScript derleyicisi bunu okur ve doğrular; standart dışı bir uzantı olarak yorumları destekler, ancak belirtim formatı JSON’dur- API yanıtları: her HTTP istemcisi ve dilde yerleşik veya ek bağımlılık gerektirmeden kullanılabilen JSON ayrıştırıcısı vardır
- Servisler arası veri alışverişi: katı sözdizimi daha az ayrıştırma sürprizi anlamına gelir
YAML Tuzakları
Norveç Sorunu
YAML 1.1 (PyYAML, Ruby’nin psych varsayılanı ve diğer birçok kütüphane tarafından kullanılır) bu tırnaksız değerleri boolean olarak işler:
# Bunların hepsi YAML 1.1'de boolean olur
enabled: yes
disabled: no
flag: on
toggled: off
Ülke kodları, kısaltmalar ve kısa yapılandırma değerleri sık sık bu tuzağa düşer. Yanlış okunabilecek stringleri tırnak içine alın:
country: "NO"
status: "off"
Sekme ile Girinti
YAML dosyasında herhangi bir yerde tek bir sekme karakteri ayrıştırma hatasına neden olur. Çoğu düzenleyicide “convert tabs to spaces” ayarı bulunur. YAML dosyaları için bunu etkinleştirin.
Çok Satırlı Stringler
YAML’ın çok satırlı stringler için iki blok skaler stili vardır. Literal blok stili (|) satır sonlarını korur:
script: |
#!/bin/bash
echo "hello"
exit 0
Folded blok stili (>) satır sonlarını boşluklara dönüştürür (okunabilirlik için satırlara bölünmüş uzun tek satırlık değerler için kullanışlıdır). JSON’da eşdeğer bir sözdizimi yoktur, bu nedenle çok satırlı JSON stringleri (içinde \n kaçış dizileri olan), dönüştürücü gömülü satır sonlarını algıladığında YAML literal bloklarına dönüşür.