JSON Çıktısı
Örnek YAML’ı 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"
]
}
}
Girinti hiyerarşisi iç içe JSON nesnelerine dönüşür. YAML dizileri JSON dizileri olur. Boolean veya sayı olmayan tırnaksız YAML stringleri JSON stringi olur.
Sorunsuz Dönüşenler
Çoğu YAML, bilgi kaybı olmadan JSON’a temiz bir şekilde dönüşür:
| YAML türü | JSON karşılığı |
|---|---|
Mapping (key: value) | Object ({"key": "value"}) |
Sequence (- item) | Array (["item"]) |
| String | String |
| Integer | Number |
| Float | Number |
Boolean (true/false) | Boolean |
Null (null, ~, boş) | null |
Tipik bir Kubernetes manifesti veya Docker Compose dosyası için dönüştürme, veri perspektifinden kayıpsızdır.
Kaybolan Özellikler
Yorumlar
YAML yorumları (# ile başlayan satırlar veya satır içi # yorum ekleri) tamamen atılır. JSON’da yorum sözdizimi yoktur. YAML yapılandırmanız alanları belgelemek için yorum kullanıyorsa, bu açıklamalar JSON çıktısında kaybolur. Bunun için yorumları ayrı bir şemaya veya README’ye taşımaktan başka çözüm yoktur.
Bağlantılar ve Takma Adlar
YAML, yeniden kullanılabilir bir bloğu bağlantı ile tanımlamanıza ve başka bir yerde takma ad ile referans vermenize izin verir:
defaults: &defaults
timeout: 30
retries: 3
production:
<<: *defaults
host: prod.example.com
staging:
<<: *defaults
host: staging.example.com
JSON çıktısında *defaults hem production hem de staging içinde tamamen genişletilir. Bağlantı notasyonu kaybolur ve paylaşılan değerler çoğaltılır:
{
"defaults": { "timeout": 30, "retries": 3 },
"production": { "timeout": 30, "retries": 3, "host": "prod.example.com" },
"staging": { "timeout": 30, "retries": 3, "host": "staging.example.com" }
}
YAML Etiketleri
!!binary, !!timestamp ve !!python/object gibi etiketler YAML’a özgü tip ek açıklamalarıdır. Çoğu dönüştürücü değeri string’e dönüştürür veya hata verir. 2024-01-15 gibi !!timestamp değerleri, kütüphaneye bağlı olarak string, sayı (Unix epoch) olabilir veya hataya neden olabilir.
Bu Dönüşüme Ne Zaman İhtiyaç Duyarsınız
Kubernetes API Çağrıları
Kubernetes kaynakları dahili olarak JSON olarak saklar ve REST API’si JSON kabul eder. Kubernetes API’sini doğrudan çağırırken (kubectl kullanmak yerine) JSON’a ihtiyacınız vardır. Manifestiniz YAML ise önce dönüştürün:
# kubectl sizin için dönüştürebilir
kubectl apply -f deployment.yaml --dry-run=client -o json
Veya betik boru hatları için özel bir araç kullanın.
YAML Yapılandırmasını JavaScript veya TypeScript’e Aktarma
Node.js’de yerleşik YAML ayrıştırıcısı yoktur. Bazı ekipler, YAML bağımlılığı eklemek yerine yapılandırmayı JSON olarak saklar. Derleme zamanında bir kez dönüştürmek veya JSON’ı YAML’ın yanında depolamak basit durumlar için pratik bir seçenektir.
JSON Olarak Görüntüleyerek YAML Hata Ayıklama
JSON’ın açık parantez ve tırnakları yapıyı belirsiz hale getirir. YAML’ın girintisi aldatıcı olabilir: yanlış yerleştirilmiş bir boşluk, bir anahtarın hangi bloğa ait olduğunu değiştirir. JSON’a dönüştürmek ve yapıyı kontrol etmek, YAML’ınızın gerçekten düşündüğünüz gibi ayrıştırılıp ayrıştırılmadığını doğrulamanın hızlı bir yoludur. Bu, özellikle girinti hatalarının kafa karıştırıcı davranışlara neden olduğu Helm chart değerlerinde veya GitHub Actions iş akışı dosyalarında hata ayıklarken kullanışlıdır.