JSON ↔ YAML dönüşümü nedir?
JSON (JavaScript Object Notation, RFC 8259) yapılandırılmış veriler için katı, süslü parantezle sınırlandırılmış metin tabanlı bir formattır; YAML (YAML Ain't Markup Language, sürüm 1.2) aynı değer modeli için girintiler, satır sonları ve insan tarafından okunabilir bir sözdizimi kullanan, JSON'un bir üst kümesidir. İkisi arasındaki dönüşüm, aynı yapılandırmayı makineye dost bir biçimle (API'ler, şema doğrulama, programatik dönüşümler için JSON) insana dost bir biçim (code review, Kubernetes manifestoları, GitHub Actions workflow'ları için YAML) arasında tek bir anahtarı yeniden yazmadan döndürmenize olanak tanır.
JSON ↔ YAML dönüşümü nasıl çalışır?
Her dönüşüm, paketlenmiş js-yaml kütüphanesi (MIT, sürüm 4.1.0) kullanılarak tarayıcınızda yerel olarak çalışır. Üst düzey adımlar şunlardır:
- Mod seçici (Otomatik algıla / JSON → YAML / YAML → JSON) hangi hattın çalışacağına karar verir. Otomatik algıla modunda girdinin boşluk olmayan ilk karakteri yönü belirler —
{veya[JSON, başka bir şey ise YAML demektir. - JSON → YAML:
JSON.parsegirdiyi doğrular ve bir JavaScript değeri üretir;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })YAML 1.2 biçimini yazar. Çok belgeli açıkken girdideki bir dizinin her öğesi bir belge olarak dökümlenir ve---ayraçlarıyla birleştirilir. - YAML → JSON:
jsyaml.loadAllgirdideki her belgeyi ayrıştırır (---ayraçlarını otomatik olarak işler) ve bir dizi döndürür; tek belgeli girdiler tek öğeli dizi olmaktan kurtarılır, böylece JSON çıktısı belgenin kendisidir. - Girinti (2 veya 4 boşluk) ve Biçimli yazdırma yapılandırılabilir. Biçimli yazdırma kapalıyken
JSON.stringify(value)ile boşluksuz küçültülmüş JSON üretilir. - Çıktı salt okunur metin alanına yazılır. YAML ayrıştırma hatalarında hata mesajı
js-yaml'ine.markalanından gelen 1-indeksli satır ve sütunu içerir, böylece doğrudan hataya atlayabilirsiniz.
JSON ile YAML'ı bu araçla neden dönüştürmelisiniz?
- Gizlilik: her ayrıştırma, dönüştürme ve üretme geçişi tarayıcınızda olur. Kubernetes sırları, imzalı JWT'ler ve özel yapılandırmalar dahil veri, sunucularımıza asla ulaşmaz.
- Çok belgeli YAML:
jsyaml.loadAll---ayraçlarını tanır ve bir belge dizisi döndürür; dönüştürücü bunu tek belgeli durumlar için açar veya çok belgeli durumlar için JSON dizisi olarak korur. - Çapa ve takma adlar çözüldü: YAML'in
&anchor/*aliasmekanizmasıjs-yaml'in varsayılan şeması tarafından ele alınır. Bir kez tanımlanıp iki kez başvurulan bir değer, gidiş-dönüşte tüm başvuruların eşit değer taşıdığı bir JSON nesnesine dönüşür. - CDN yok, telemetri yok:
js-yaml.min.jskütüphanesi sayfayla aynı kökenden gönderilir, bu yüzden araç çevrimdışı, kurumsal proxy'lerin arkasında ve hava boşluklu ortamlarda çalışır.
JSON ↔ YAML dönüşümünün yaygın uygulamaları nelerdir?
JSON ile YAML arasında dönüş, DevOps, platform mühendisliği ve API araçları boyunca karşımıza çıkar:
- Kubernetes manifestoları: bir YAML
Deployment,ConfigMapveyaHelmRelease'i, kurum içi politika doğrulayıcısının (Joi, Ajv, OPA Rego) programatik olarak inceleyebilmesi için JSON'a, ardından küme uygulaması için tekrar YAML'a dönüştürmek. - CI/CD iş akışları: bir GitHub Actions
workflow.yml'ini, bir kod üreticisinin matrisi veya iş bağımlılıklarını yeniden yazabilmesi için JSON üzerinden gezdirmek ve PR için temizlenmiş YAML üretmek. - OpenAPI spesifikasyonları: backend'in otomatik üretilen dokümanlarından gelen bir JSON
openapi.json'u yapıştırıp depoda tutulan, elle düzenlenmiş referans içinopenapi.yaml'a dönüştürmek.
Bir JSON ↔ YAML gidiş-dönüş örneği nasıl görünür?
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} yapıştırıp JSON → YAML modunda DÖNÜŞTÜR'e basmak ilk satırda apiVersion: apps/v1 olan sekiz satır girintili YAML üretir. Bu YAML'ı tekrar YAML → JSON modunda Biçimli yazdırma açıkken beslemek, kararlı JSON.stringify(value, null, 2) sonrası özgün nesneyi bayt bayt geri verir; anahtar sırası korunur çünkü js-yaml'in varsayılan şeması her iki yönde de ekleme sırasını gözetir.
Bu JSON ↔ YAML dönüştürücüsü tamamen tarayıcımda mı çalışır?
Evet. Her ayrıştırma, dönüştürme ve üretme geçişi tarayıcı sekmenizin içinde JavaScript olarak yerel olarak çalışır. Paketlenmiş js-yaml kütüphanesi sayfayla aynı kökenden gönderilir — CDN yok, fetch yok, XMLHttpRequest yok, girdide navigator.sendBeacon yok. Araç ayrıca sayfa yüklendikten sonra çevrimdışı da çalışır; çünkü sağlayıcı kütüphanenin yanına kopyalandığı statik bir HTML/CSS/JS paketidir. Kubernetes sırları, JWT yükleri, imzalı CloudFormation YAML'ları ve özel yapılandırmalar cihazınızda kalır.
Dönüştürücü çok belgeli YAML'ı nasıl işler?
YAML, yalnızca --- içeren satırlarla ayrılmış tek bir akışta birden çok belgeyi destekler. YAML → JSON'da dönüştürücü jsyaml.loadAll'u çağırır; bu, her belgeyi bir JavaScript değeri olarak döndürür. Tam olarak bir belge bulunduysa JSON çıktısı doğrudan o belgedir; iki veya daha fazlası bulunduysa JSON çıktısı bir dizidir. JSON → YAML'da, girdi bir JSON dizisi olduğunda VE Çok belgeli anahtarı açıkken her dizi öğesi kendi belgesi olarak aralarda --- ayraçlarıyla üretilir — bir JSON kaynak dizisinden kubectl apply-uyumlu paket oluşturmak için kullanışlı.
YAML çapaları ve takma adları destekleniyor mu?
Evet — &anchor tanımları ve *alias başvuruları yükleme adımında js-yaml'in varsayılan şeması tarafından çözülür. defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d gibi bir YAML girdisi, job_a ve job_b'nin ikisinin de retries: 3, timeout: 30 içerdiği bir JSON nesnesine ayrıştırılır. << birleştirme anahtarı (YAML 1.1 uzantısı, js-yaml hâlâ destekler) da varsayılan şemada desteklenir.
YAML yorumları JSON'a dönüştürülürken ve geri dönerken korunur mu?
Hayır — js-yaml ayrıştırma adımında yorumları siler, dolayısıyla bir YAML → JSON → YAML gidiş-dönüşü # önekli her satırı yitirir. Bu, load/dump modelinin bilinen bir sınırlamasıdır; yorum korumanın kritik olduğu durumlarda js-yaml yerine, yaml npm paketi (trivia korumayı tasarlanmış CST + AST API'sini sunar) gibi yorum bilinçli bir kütüphane kullanın. Çoğu yapılandırma dönüşüm akışı için ödün kabul edilebilirdir: gidiş-dönüş yapılan YAML her anahtarı, değeri, çapayı ve takma adı korur — sadece yazar yorumları olmadan.
Özel YAML etiketlerine ne olur?
Dönüştürücü js-yaml'in DEFAULT_SCHEMA'sını kullanır; bu da !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary ve !!timestamp'ı — YAML 1.2 core ve JSON şemalarındaki her etiketi anlar. Özel veya uygulamaya özgü etiketler (örn. CloudFormation'da !Ref, Ansible'da !vault) tanınmaz ve desteklenmeyen etiketi gösteren net bir hatayla yüzeye çıkar. Özellikle CloudFormation için, bu dönüştürücüye yapıştırmadan önce özel etiketleri açmak için aws cloudformation package + --output-template-file akışını kullanın.
Bu JSON ↔ YAML dönüştürücüsü, aynı kökenden paketlenmiş js-yaml@4.1.0 ile gelir, çok belgeli akışları ve çapa/takma adları kutudan çıkar çıkmaz destekler, kaynağı düzeltebilmeniz için YAML ayrıştırma hatalarını satır ve sütunla raporlar. Yükleme yok, CDN yok, telemetri yok — her bayt tarayıcınızda kalır.