JSON ↔ YAML dönüştürücü nasıl kullanılır?
- Yönü seçin: JSON → YAML veya YAML → JSON.
- Belgenizi giriş kutusuna yapıştırın ya da doğrudan yazın.
- Dönüştürülen çıktı anında görünür. Girdi geçersizse hata mesajı, ayrıştırılamayan satırı gösterir.
- Sonucu manifestinize, pipeline dosyanıza ya da API istemcinize kopyalayın.
Dönüştürme tamamen tarayıcınızda çalışır; bu yüzden iç ağ ana bilgisayar adları veya kimlik bilgileri içeren yapılandırma dosyaları sunucularımıza hiçbir zaman yüklenmez ve orada saklanmaz.
JSON ve YAML: aynı veri, iki gösterim
JSON (JavaScript Object Notation) ve YAML (YAML Ain't Markup Language) aynı temel yapıları anlatır: eşlemeler (anahtar-değer çiftli nesneler), diziler ve skalerler (dizeler, sayılar, mantıksal değerler ve null). YAML 1.2'den beri her geçerli JSON belgesi aynı zamanda geçerli bir YAML belgesidir; bu yüzden JSON'dan YAML'a dönüştürme kayıpsızdır. Ters yön de genellikle kayıpsızdır, ama YAML'ın JSON'da bulunmayan yorumlar, çapalar (anchors) ve çok satırlı blok dizeleri gibi özellikleri vardır; JSON üretirken bunlar düzleştirilir ya da atılır.
Geliştiriciler ikisi arasında sürekli dönüşüm yapar:
- Kubernetes manifestleri normalde YAML ile yazılır;
kubectl get -o jsonve API'nin kendisi ise JSON kullanır. - Docker Compose dosyaları (
compose.yaml) YAML'dır; betiklerle üretirken JSON'a dönüştürmek işe yarar. - GitHub Actions ve çoğu CI sistemi iş akışlarını YAML ile tanımlar.
- OpenAPI belirtimleri iki biçimde de yazılabilir ve birçok araç ikisini de kabul eder.
Aynı nesne iki gösterimde:
{"service": "web", "replicas": 3, "ports": [80, 443], "debug": false}
service: web
replicas: 3
ports:
- 80
- 443
debug: false
Sık görülen YAML tuzakları
"Norveç sorunu"
YAML 1.1, tırnaksız yes, no, on, off, y ve n değerlerini (çeşitli büyük-küçük harf biçimleriyle) mantıksal değer sayar. Bu yüzden bir ülke kodları listesinde, YAML 1.1'i izleyen ayrıştırıcılarda Norveç false olur:
countries:
- GB
- NO # YAML 1.1: false YAML 1.2 çekirdek şeması: "NO"
- SE
YAML 1.2 mantıksal değerleri true ve false ile sınırlar, ama yaygın kullanılan birçok kütüphane hâlâ varsayılan olarak 1.1 davranışını uygular. Güvenli alışkanlık, başka bir türle karıştırılabilecek her dizeyi tırnak içine almaktır: "NO", "on", "1.10", "0755". Sürüm numaraları klasik bir tuzaktır: tırnaksız 1.10, 1.1 sayısına dönüşür.
Girinti
YAML, iç içe yapıyı ifade etmek için girinti kullanır ve girinti için sekmeler (tab) kullanılamaz. Tek bir yanlış hizalanmış boşluk yapıyı değiştirir ya da ayrıştırmayı bozar:
spec:
containers:
- name: app
image: nginx
ports: # bir boşluk eksik: ayrıştırma hatası
- containerPort: 80
Çapalar ve takma adlar
YAML, bir bloğu &name ile bir kez tanımlayıp *name ile yeniden kullanmanıza izin verir; bu çoğu zaman birleştirme anahtarı << ile birlikte kullanılır. JSON'da bunun karşılığı yoktur; bu yüzden dönüştürücü her takma adı tam bir kopyaya açar:
defaults: &defaults
restart: always
logging: json
web:
<<: *defaults
image: nginx
Birleştirme anahtarının bir YAML 1.1 uzantısı olduğunu, her ayrıştırıcının onu desteklemediğini unutmayın.
Temiz dönüşümler için ipuçları
- YAML'dan JSON'a dönüştürürken yorumlar (
# ...) atılır, çünkü JSON'da yorum sözdizimi yoktur. Yorumlar önemliyse kaynak olarak YAML dosyasını koruyun. - Çok satırlı blok dizeler (
|satır sonlarını korur,>onları boşluğa katlar) JSON'da\nkaçış dizili sıradan dizelere dönüşür. - 253'ü aşan büyük tamsayılar JavaScript tabanlı araçlarda hassasiyet kaybedebilir. Aynen kalması gereken kimlikleri tırnak içine alın.
- Sonucu daha da düzenlemek için JSON Biçimlendirici ve Doğrulayıcı'dan ya da YAML Biçimlendirici ve Doğrulayıcı'dan geçirin.
--- ile ayrılmış birden çok YAML belgesi içerebilir. JSON'da böyle bir kavram yoktur; bu yüzden çok belgeli dosyaları dönüştürmeden önce bölün ya da çıktıda yalnızca bir belge bekleyin.Sıkça sorulan sorular
Her JSON dosyası geçerli bir YAML mıdır?
YAML 1.2'de evet: JSON'un üst kümesi olarak tasarlandı. JSON'u doğrudan çoğu YAML ayrıştırıcısına verebilirsiniz. Blok biçimli YAML'a dönüştürmek, yalnızca okumayı ve düzenlemeyi kolaylaştırır.
YAML değerimin türü dönüşümden sonra neden değişti?
Tırnaksız skalerleri ayrıştırıcı çözümler. no, off, 1e3, 0x1F ya da 2024-01-01 gibi değerler, YAML sürümüne ve kütüphaneye bağlı olarak mantıksal değere, sayıya ya da tarihe dönüşebilir. Dize olarak kalmaları için tırnak içine alın.
YAML'da sekme kullanabilir miyim?
Hayır. YAML belirtimi girinti için sekme karakterlerini yasaklar. Genellikle düzey başına iki olmak üzere boşluk kullanın ve düzenleyicinizi boşlukları otomatik ekleyecek şekilde ayarlayın.
Yorumlar gidiş dönüşte korunur mu?
Hayır. YAML JSON'a çevrilir çevrilmez yorumlar kaybolur ve geri dönüştürürken kurtarılamaz. Yorumları özgün YAML dosyasında tutun.
Güncellendi