Skip to content

JSON'dan YAML'a Dönüştürücü

JSON yapıştırın, anında YAML alın. Tarayıcınızda canlı dönüştürme. K8s/Compose uyumlu, 2/4 boşluk girinti, Norway güvenli tırnak. %100 gizli, yükleme yok.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Seçenekler · 2 boşluk · otomatik · blok
Girinti
Stil
0 karakter
YAML Çıktı
0 satır
RFC 8259 uyumluluğu, YAML 1.2 spesifikasyon çıktısı ve Norway sorunu işleme doğruluğu için incelendi — Go Tools Engineering Team · May 4, 2026

YAML nedir ve neden JSON'dan dönüştürülür?

YAML (YAML Ain't Markup Language), yapılandırma dosyaları, kod olarak altyapı ve insanların yazdığı ancak makinelerin okuduğu her türlü veri için tasarlanmış, insan tarafından okunabilir bir veri serileştirme formatıdır. Girintiye dayalı sözdizimi, küme parantezi veya köşeli parantez gerektirmez; bu da karmaşık iç içe yapıları JSON'a kıyasla çok daha okunabilir kılar. Kubernetes, Helm, Ansible, Docker Compose, GitHub Actions, CircleCI ve neredeyse tüm bulut-native araçlar YAML'ı birincil yapılandırma formatı olarak kullanır. Bu nedenle JSON'u YAML'a dönüştürmek, DevOps ve backend geliştirmede en yaygın görevlerden biridir — JSON olarak bir API'den kaynak tanımı alırsınız ve sürüm kontrolüne işlemek için bir YAML manifest'ine ihtiyaç duyarsınız.

Bu araç, tipik online dönüştürücülere kıyasla dört önemli farka sahiptir:

**1. Norway Sorunu — Otomatik Güvenli Tırnak.** JSON'dan YAML'a dönüştürmedeki en büyük tuzak, YAML Norway sorunudur. YAML 1.1'de (üretim ortamındaki milyonlarca ayrıştırıcı hâlâ kullanıyor; eski Kubernetes, PyYAML, Ansible ve Ruby'nin Psych kütüphanesi dahil), çıplak yes, no, on, off, y ve n dizeleri boolean true/false olarak ayrıştırılır. Bu durum, Norveç'in ISO ülke kodunu ünlü şekilde etkiledi ("NO" → false) ve Kubernetes yapılandırmalarında gerçek üretim kesintilerine yol açtı. YAML 1.2 bunu düzeltti; ancak ayrıştırıcılarınız 1.2'ye geçmemiş olabilir. Bu aracın varsayılan Otomatik tırnak modu, YAML 1.1 şemasıyla eemeli/yaml kütüphanesini kullanarak Norway sorunlu dizeleri otomatik olarak tırnak içine alır ve hem YAML 1.1 hem de YAML 1.2 ayrıştırıcılarında güvenli gidiş-dönüş sağlar. Daha fazla bilgi için YAML Norway Sorunu ve JSON-YAML Farkları adlı makalemize bakın.

**2. Anahtar Sırası Koruması.** Anahtarları alfabetik olarak sıralayan bazı dönüştürücülerin aksine, bu araç JSON'daki orijinal anahtar ekleme sırasını korur — tüm modern JavaScript motorlarındaki JSON.parse() davranışıyla eşleşir. Bu, Kubernetes manifest'leri (conventionel olarak önce apiVersion ve kind beklenir), OpenAPI spesifikasyonları (paths'ten önce info gelir) ve alan sıralamasının okunabilirlik veya diff açısından önemli olduğu tüm yapılandırmalar için önemlidir.

**3. Büyük Sayı Hassasiyet Uyarısı.** 2^53 - 1'den büyük JSON sayıları (9007199254740991), JavaScript'in IEEE 754 çift duyarlıklı kayan nokta biçiminde hassas biçimde temsil edilemez. JSON.parse() büyük bir tam sayıyı (sunucu tarafında 64 bitlik tam sayı olan Kubernetes resourceVersion alanı gibi) okuduğunda sessizce keser. Bu, bu araç dahil her tarayıcı tabanlı JSON aracını etkileyen temel bir tarayıcı JavaScript sınırlamasıdır. Güvenli geçici çözüm, dönüştürmeden önce büyük tam sayıların JSON'da dize olarak saklanmasını sağlamaktır.

**4. %100 Tarayıcı Tabanlı Gizlilik.** API anahtarları, veritabanı kimlik bilgileri, dahili servis yapılandırmaları ve üretim sırları içeren JSON verileriniz tarayıcınızdan asla ayrılmaz. Hiçbir veri sunucuya gönderilmez. Bunu tarayıcınızın Ağ sekmesinde doğrulayabilirsiniz. Bu, online araçlarda hassas yapılandırma verilerini işlemenin tek güvenli yoludur. Ters yönde kullanım için YAML'dan JSON'a Dönüştürücü aracımıza, dönüştürmeden önce JSON'u doğrulamak ve güzel yazdırmak için JSON Biçimlendirici aracımıza bakın.

YAML'ın insan tarafından okunabilirliği bir bedelle gelir: JSON'dan daha fazla ayrıştırma sınır durumu içerir. Norway sorunun ötesinde YAML'ın sekizlik sayı tuhafları (YAML 1.1'de 0777, 511 olarak ayrıştırılır), çok satırlı dize sözdizimi (| için değişmez, > için katlı), çapa ve takma ad referansları (&anchor ve *alias) ve çok belgeli destek (--- ayırıcı) bulunmaktadır. JSON'da bu karmaşıklıklar yoktur — yalnızca altı veri türü olan katı, minimal bir formattır. Makineden makineye veri değişimi için neredeyse her zaman JSON daha iyi tercihtir. İnsanlar tarafından düzenlenen yapılandırma dosyaları için okunabilirlik ve yorumların daha önemli olduğu durumlarda YAML kazanır. Bu dönüştürücü size her ikisinin avantajını sunar: JSON'ı programlı olarak kullanın, altyapı yapılandırmanız için YAML'a dönüştürün.

// Convert JSON to YAML in Node.js using the eemeli/yaml library
import { Document } from 'yaml';

const data = JSON.parse('{"apiVersion":"apps/v1","kind":"Deployment"}');

// version: '1.1' ensures Norway-problem strings (yes/no/on/off/y/n)
// are automatically quoted in the output for YAML 1.1 parser safety
const doc = new Document(data, { version: '1.1' });

const yamlString = doc.toString({
  indent: 2,
  lineWidth: 0,         // disable line wrapping
  defaultStringType: 'PLAIN',   // Auto mode: only quote when needed
});

console.log(yamlString);
// apiVersion: apps/v1
// kind: Deployment

Temel Özellikler

Canlı Dönüştürme

JSON yazarken veya yapıştırırken YAML çıktısı anında güncellenir — Dönüştür düğmesine gerek yok. Büyük girişler (>200KB) tarayıcının yanıt vermeye devam etmesi için otomatik olarak manuel moda geçer.

2 veya 4 Boşluk Girinti

2 boşluk (Kubernetes, Docker Compose ve GitHub Actions standardı) ile 4 boşluk (Ansible standardı) arasında geçiş yapın. YAML sekme kullanımını yasaklar — bu araç her zaman boşluk kullanır.

Otomatik Güvenli Tırnak (Norway Güvenli)

Varsayılan Otomatik mod, YAML 1.1 ayrıştırıcılarının boolean olarak yanlış okuyacağı "no", "yes", "on", "off", "y" ve "n" gibi dizeleri otomatik olarak tırnak içine almak için YAML 1.1 şemasını kullanır; bu da üretim yanlış yapılandırmalarını önler.

Blok ve Akış Stilleri

Blok stili, manifest'ler ve yapılandırma dosyaları için ideal olan girintili, insan tarafından okunabilir YAML üretir. Akış stili, JSON'a benzeyen kompakt, satır içi YAML üretir — belge parçacıkları veya minimal çıktı tercih eden araçlar için kullanışlıdır.

%100 Tarayıcı Tabanlı Gizlilik

Tüm dönüştürme, JavaScript kullanılarak tarayıcınızda yerel olarak çalışır. API anahtarları, kimlik bilgileri ve üretim yapılandırmaları dahil JSON verileriniz hiçbir sunucuya gönderilmez, kayıt altına alınmaz ve saklanmaz.

K8s, Compose ve Terraform Dosyalarını Destekler

Gerçek dünya DevOps kullanım durumları için optimize edilmiştir: Kubernetes manifest'leri, Docker Compose yığınları, Helm chart değerleri, GitHub Actions iş akışları, OpenAPI spesifikasyonları ve Terraform JSON plan çıktıları — her biri için örnekler mevcuttur.

Örnekler

Kubernetes Deployment

{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"my-app","namespace":"production","labels":{"app":"my-app","version":"1.0.0"}},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"my-app"}},"template":{"metadata":{"labels":{"app":"my-app"}},"spec":{"containers":[{"name":"my-app","image":"my-app:1.0.0","ports":[{"containerPort":8080}],"resources":{"requests":{"memory":"64Mi","cpu":"250m"},"limits":{"memory":"128Mi","cpu":"500m"}}}]}}}}

JSON API yanıt formatındaki Kubernetes Deployment manifest'ini kubectl apply -f ile uygulamak için YAML'a dönüştürün

Docker Compose

{"version":"3.9","services":{"web":{"image":"nginx:1.25-alpine","ports":["80:80","443:443"],"environment":{"NGINX_HOST":"example.com","NGINX_PORT":"80"},"depends_on":["db"],"restart":"unless-stopped"},"db":{"image":"postgres:16-alpine","environment":{"POSTGRES_DB":"mydb","POSTGRES_USER":"admin","POSTGRES_PASSWORD":"secret"},"volumes":["pgdata:/var/lib/postgresql/data"]}},"volumes":{"pgdata":{}}}

Docker Compose servis tanımını JSON'dan docker compose up için gereken YAML formatına dönüştürün

GitHub Actions İş Akışı

{"name":"CI","on":{"push":{"branches":["main"]},"pull_request":{"branches":["main"]}},"jobs":{"build":{"runs-on":"ubuntu-latest","steps":[{"uses":"actions/checkout@v4"},{"name":"Set up Node.js","uses":"actions/setup-node@v4","with":{"node-version":"20","cache":"pnpm"}},{"name":"Install dependencies","run":"pnpm install --frozen-lockfile"},{"name":"Run tests","run":"pnpm test"}]}}}

GitHub Actions CI iş akışı tanımını JSON'dan .github/workflows/ dizinine işlenecek YAML'a dönüştürün

OpenAPI Spesifikasyonu

{"openapi":"3.0.3","info":{"title":"User API","version":"1.0.0","description":"Manage application users"},"paths":{"/users":{"get":{"summary":"List users","operationId":"listUsers","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":20}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}}}}},"/users/{id}":{"get":{"summary":"Get user","operationId":"getUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"}}}}},"components":{"schemas":{"User":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"}}}}}}

OpenAPI 3.0 spesifikasyonunu JSON'dan YAML'a dönüştürün — Swagger UI, Redoc ve çoğu API aracı için tercih edilen format

package.json

{"name":"my-app","version":"1.0.0","description":"A sample Node.js application","private":true,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","test":"vitest","lint":"eslint . --ext .ts,.tsx"},"dependencies":{"react":"^18.3.0","react-dom":"^18.3.0"},"devDependencies":{"typescript":"^5.4.0","vite":"^5.2.0","vitest":"^1.5.0","eslint":"^8.57.0","@types/react":"^18.3.0"},"engines":{"node":">=20.0.0","pnpm":">=9.0.0"}}

Tipik bir Node.js package.json'ı YAML'a dönüştürün — proje yapılandırmasını YAML tercih eden araçlara taşımak için kullanışlıdır

Terraform JSON Planı

{"format_version":"1.0","terraform_version":"1.7.4","variables":{"region":{"value":"us-east-1"}},"planned_values":{"root_module":{"resources":[{"address":"aws_s3_bucket.main","mode":"managed","type":"aws_s3_bucket","name":"main","values":{"bucket":"my-app-assets","force_destroy":false,"tags":{"Environment":"production","ManagedBy":"terraform"}}}]}},"resource_changes":[{"address":"aws_s3_bucket.main","mode":"managed","type":"aws_s3_bucket","name":"main","change":{"actions":["create"],"before":null,"after":{"bucket":"my-app-assets","force_destroy":false}}}]}

Terraform JSON plan çıktısını insan incelemesi, GitOps denetimi ve CI/CD pipeline'ları için YAML'a dönüştürün — çoğu dönüştürücünün atladığı bir özellik

Nasıl Kullanılır

  1. 1

    JSON Verilerinizi Yapıştırın

    JSON verilerinizi yukarıdaki giriş alanına girin veya yapıştırın. Kubernetes Deployment, Docker Compose dosyası veya Terraform planı gibi bir örnek denemek için «Örnek yükle» düğmesine de tıklayabilirsiniz.

  2. 2

    Canlı YAML Çıktısını Görün

    YAML, çıktı panelinde anında görünür. Hedef aracınızın gereksinimlerini karşılamak için Seçenekleri (girinti 2/4, tırnak Otomatik/Çift/Tek, stil Blok/Akış) ayarlayın.

  3. 3

    Kopyalayın veya İndirin

    YAML'ı panoya almak için Kopyala'ya veya kubectl apply, docker compose up ya da başka araçlar için hazır olan .yaml dosyası olarak kaydetmek için İndir'e tıklayın.

Yaygın Dönüştürme Tuzakları

Sondaki Virgüller

JSON, bir nesne veya dizideki son öğeden sonra virgüle izin vermez. Bu, JavaScript kodundan kopyalarken son derece yaygındır çünkü JavaScript sondaki virgüllere izin verir. Dönüştürmeden önce son virgülü kaldırın.

✗ Yanlış
{"name": "Alice", "role": "admin",}
✓ Doğru
{"name": "Alice", "role": "admin"}

Tek Tırnaklar

JSON, tüm dize değerleri ve nesne anahtarları için çift tırnak gerektirir. Tek tırnaklar JavaScript ve Python'da geçerlidir; ancak JSON'da sözdizimi hatasıdır.

✗ Yanlış
{'name': 'Alice', 'active': true}
✓ Doğru
{"name": "Alice", "active": true}

Tırnaksız Anahtarlar

Tüm JSON nesne anahtarları çift tırnak içine alınmalıdır. Tırnaksız anahtarlar JavaScript nesne değişmezlerinde geçerlidir; ancak katı JSON'da ayrıştırma hatasına yol açar.

✗ Yanlış
{name: "Alice", role: "admin"}
✓ Doğru
{"name": "Alice", "role": "admin"}

Yorumlara İzin Verilmez

Standart JSON hiçbir türde yorumu desteklemez — //, /* */ veya # kullanılamaz. Yapılandırmada yorum gerekiyorsa YAML (# yorumlarını destekler) veya JSONC (VS Code'un kullandığı, yorumlu JSON) kullanın. Veriyi JSON olarak kullanmadan önce tüm yorumları temizleyin.

✗ Yanlış
{"port": 8080 // HTTP port}
✓ Doğru
{"port": 8080}

YAML Norway Sorunu (Otomatik modda otomatik olarak ele alınır)

YAML 1.1 ayrıştırıcılarında (Kubernetes, Ansible, PyYAML, Ruby Psych tarafından kullanılır), çıplak yes, no, on, off, y ve n dizeleri dize yerine boolean true/false olarak ayrıştırılır. Bu aracın Otomatik modu, herhangi bir YAML 1.1 veya 1.2 ayrıştırıcısında güvenli gidiş-dönüş sağlamak için bu değerleri YAML çıktısında otomatik olarak tırnak içine alır. Çift veya Tek tırnak modunu seçerseniz tüm dizeler açıkça tırnak içine alınır ve sorun yine önlenmiş olur; ancak Otomatik modun çıktısı daha doğal görünür.

✗ Yanlış
# JSON input: {"country": "no", "enabled": "yes"}
# YAML without quoting (dangerous):
country: no
enabled: yes
# YAML 1.1 parser reads: country=false, enabled=true
✓ Doğru
# YAML with Auto quoting (safe):
country: 'no'
enabled: 'yes'
# YAML 1.1 parser reads: country="no", enabled="yes"

Büyük Tam Sayılarda Hassasiyet Kaybı

JavaScript, tam sayıları yalnızca 2^53 - 1'e kadar (9007199254740991) hassas biçimde temsil edebilir. Bundan büyük JSON tam sayıları — sunucu tarafında int64 olan Kubernetes resourceVersion alanları gibi — JSON.parse() tarafından ayrıştırılırken sessizce yuvarlanır. Bu yuvarlanan sayı daha sonra YAML çıktısında görünür. Bu, tüm tarayıcı tabanlı JSON araçlarını etkileyen temel bir tarayıcı JavaScript sınırlamasıdır. Güvenli geçici çözüm, büyük tam sayıları dönüştürmeden önce JSON'da dize olarak saklamaktır.

✗ Yanlış
// JSON input (resourceVersion is int64 on K8s server)
{"resourceVersion": 9007199254740993}
// JavaScript reads it as: 9007199254740992 (precision lost)
// YAML output will contain the wrong number
✓ Doğru
// Store large integers as strings to preserve precision
{"resourceVersion": "9007199254740993"}
// YAML output: resourceVersion: '9007199254740993' (exact)

Yaygın Kullanım Senaryoları

Kubernetes Manifest'leri
kubectl get -o json veya Kubernetes API'sinden gelen JSON API yanıtlarını GitOps iş akışları, Kustomize overlay'leri ve kubectl apply -f dağıtımları için YAML manifest'lerine dönüştürün.
Docker Compose Dosyaları
docker inspect JSON çıktısını veya programlı olarak oluşturulan servis yapılandırmalarını docker compose up ve Docker Stack dağıtımlarıyla uyumlu docker-compose.yaml dosyalarına dönüştürün.
Helm Chart Değerleri
JSON yapılandırma dışa aktarmalarını Helm chart dağıtımları için YAML değerleri dosyalarına dönüştürün; temiz YAML sözdizimi ile sürüm kontrollü altyapı yapılandırması sağlayın.
GitHub Actions İş Akışları
GitHub Actions iş akışı tanımlarını JSON'da programlı olarak oluşturun ve GitHub Actions çalıştırıcısının gerektirdiği .github/workflows/*.yaml formatına dönüştürün.
OpenAPI Spesifikasyonları
Pek çok framework'ün (FastAPI, SpringDoc) JSON formatında döndürdüğü OpenAPI/Swagger spesifikasyonlarını Swagger UI, Redoc ve API ağ geçidi araçlarının tercih ettiği YAML formatına dönüştürün.
Yapılandırma Geçişi
JSON'da saklanan uygulama yapılandırmalarını (appsettings.json, config.json) YAML gerektiren veya tercih eden araçlar için YAML formatına geçirin; yorum kullanarak belgeleme imkânı ekleyin.

Teknik Ayrıntılar

RFC 8259 Uyumlu JSON Ayrıştırma
JSON girişi, tam RFC 8259 uyumlu tarayıcının yerel JSON.parse() işlevi kullanılarak ayrıştırılır. Bu, konum bilgisi (satır ve sütun numaraları) dahil doğru sözdizimi hata mesajları sağlar ve tüm JSON veri türlerini işler: dizeler, sayılar, boolean değerler, null, diziler ve nesneler.
YAML 1.1 Şemasıyla eemeli/yaml Document API üzerinden YAML 1.2 Çıktısı
YAML, version: '1.1' ile eemeli/yaml kütüphanesi (v2.8+, CVE güvenli) Document API'si üzerinden üretilir. Bu kombinasyon, YAML 1.2 uyumlu çıktı üretirken YAML 1.1 tırnak kurallarını uygular — yani Norway sorunlu dizeler (yes/no/on/off/y/n) çıktıda otomatik olarak tırnak içine alınır ve hem YAML 1.1 hem de 1.2 ayrıştırıcıları için güvenli olur. Satır kaydırma devre dışı bırakılır (lineWidth: 0) ve uzun dizeler bütünüyle korunur.
%100 Tarayıcı Tabanlı — Yükleme Yok, Sunucu Yok
Tüm işlem tamamen tarayıcınızın JavaScript motorunda gerçekleşir. Hiçbir veri hiçbir noktada ağ üzerinden iletilmez. 200KB'ı aşan girişler, tarayıcının yanıt vermeye devam etmesi ve yoğun serileştirme sırasında ana iş parçacığının bloke olmasını önlemek için otomatik olarak canlı moddan manuel moda (açık bir Dönüştür tıklaması gerektirir) geçer.

En İyi Uygulamalar

DevOps Yapılandırmaları için Her Zaman Otomatik Tırnak Modu Kullanın
JSON'u Kubernetes, Helm, Ansible, Docker Compose veya GitHub Actions için dönüştürürken her zaman varsayılan Otomatik (Norway güvenli) tırnak modunu kullanın. Bu araçlardaki YAML 1.1 ayrıştırıcıları, çıplak yes, no, on, off, y ve n dizelerini sessizce boolean olarak yanlış okur — Otomatik mod bunu şeffaf biçimde önler.
Bulut-Native Araçlar için 2 Boşluk Girinti Kullanın
Kubernetes, Docker Compose, GitHub Actions ve Helm standardı olarak 2 boşluk girinti kullanır. Bu dosyalarda 4 boşluk girinti geçerli YAML olmakla birlikte topluluk örnekleriyle, otomatik oluşturulan yapılandırmalarla ve ekibinizin mevcut manifest'leriyle tutarsızlık yaratır.
Dönüştürmeden Önce Büyük Tam Sayıları Dize Olarak Saklayın
Kubernetes'in resourceVersion, uid ve API sunucusundaki diğer int64 alanları JavaScript'in güvenli tam sayı aralığını (2^53 - 1) aşabilir. Tam sayı hassasiyetine ihtiyacınız varsa, bu değerleri dönüştürmeden önce JSON dizesi olarak saklayın. Bu, sunucu tarafında oluşturulan alanlar içeren kubectl get -o json çıktısı için özellikle önemlidir.
Önce JSON'u Doğrulayın
JSON kaynağınız elle yazılmış veya zaman zaman geçersiz çıktı üreten bir sistemden (sondaki virgüller, tırnaksız anahtarlar, yorumlar) geliyorsa, dönüştürmeden önce bir JSON biçimlendirici ile doğrulayın. Önce sözdizimi hatalarını yakalamak ve düzeltmek için JSON Biçimlendirici aracımızı kullanın, ardından temiz JSON'u YAML'a dönüştürün.
Sürüm Kontrolüne Gidecek Dosyalar için Blok Stili Tercih Edin
Blok stili YAML, her alan kendi satırında göründüğünden Git'te temiz, insan tarafından okunabilir diff'ler üretir. Akış stili (kompakt, satır içi) diff'leri okumayı ve incelemeyi zorlaştırır. Akış stilini belgelere kısa YAML parçacıkları eklemek veya kompakt çıktı gerektiren araçlar için saklayın.

Sıkça Sorulan Sorular

JSON'u online olarak YAML'a nasıl dönüştürürüm?
JSON'unuzu yukarıdaki giriş alanına yapıştırın. Araç, tarayıcınızda anında YAML'a dönüştürür — düğmeye tıklamanıza gerek yok. Seçenekler panelinden girinti (2 veya 4 boşluk), tırnak stili (Otomatik, Çift veya Tek) ve çıktı stili (Blok veya Akış) ayarlayabilirsiniz. YAML çıktı alanında göründükten sonra panoya kopyalamak için Kopyala'ya veya .yaml dosyası olarak kaydetmek için İndir'e tıklayın. Her şey yerel olarak çalışır — verileriniz cihazınızdan asla ayrılmaz.
YAML Norway sorunu nedir ve bu araç nasıl ele alıyor?
YAML Norway sorunu, YAML 1.1 spesifikasyonundaki bir tuhaflığa işaret eder: "no", "yes", "on", "off", "y" ve "n" gibi çıplak karakter dizileri, dize yerine boolean değer (false/true) olarak ayrıştırılır. Bu durum, Norveç'in ISO ülke kodu olan "NO"nun Ansible playbook'larında ve Kubernetes yapılandırmalarında yanlışlıkla boolean false olarak okunmasına yol açan ünlü bir gerçek dünya sorununa neden oldu. YAML 1.2 bu sorunu düzeltti; ancak üretim ortamındaki milyonlarca ayrıştırıcı (eski Kubernetes sürümleri, PyYAML, Ansible, Ruby'nin Psych kütüphanesi) hâlâ YAML 1.1 kullanmaktadır. Bu aracın varsayılan Otomatik tırnak modu, tüm Norway sorunlu dizeleri otomatik olarak tırnak içine alarak hem YAML 1.1 hem de YAML 1.2 ayrıştırıcılarında güvenli bir şekilde gidiş-dönüş yapılmasını sağlar. Girdinizde Norway sorunlu dizeler algılandığında, uyarı başlığı hangi değerlerin otomatik tırnaklandığını tam olarak listeler.
Norway sorunu Kubernetes ve DevOps için neden önemli?
Kubernetes YAML manifest'leri, Helm chart değerleri, Ansible playbook'ları ve GitHub Actions iş akışları tarihsel olarak YAML 1.1 kullanan araçlar tarafından ayrıştırılır. Bir yapılandırma anahtarının değeri "no" ise (örneğin ülke kodu, dize biçiminde etkinleştirme bayrağı veya özel bir boolean benzeri alan), YAML 1.1 ayrıştırıcısı bunu sessizce boolean false'a çevirir. Bu durum, YAML metne bakıldığında doğru görünmesine rağmen ayrıştırıldığında farklı davranması nedeniyle hata ayıklaması son derece güç olan servis yanlış yapılandırmalarına yol açabilir. JSON'u Kubernetes veya herhangi bir DevOps araç zincirine dönüştürürken güvenli gidiş-dönüş için her zaman Otomatik tırnak modunu kullanın.
YAML için 2 boşluk mu yoksa 4 boşluk girinti mi kullanmalıyım?
Kubernetes manifest'leri, Helm değerleri, Docker Compose dosyaları ve GitHub Actions iş akışları için 2 boşluk girintisi kullanın — bu araçlar 2 boşluklu YAML çevresinde tasarlanmıştır ve topluluk standardıdır. Ansible playbook'ları (4 boşluk standardını izler) ve ekibiniz veya kuruluşunuzun bunu zorunlu kılan bir stil kılavuzu varsa 4 boşluk kullanın. YAML sekme karakterini tamamen yasaklar — tüm girintiler boşluk olmalıdır. Bu araç varsayılan olarak 2 boşluk kullanır; bu, bulut-native kullanım durumlarının büyük çoğunluğu için doğru tercihtir.
Bu araçla Kubernetes manifest'i nasıl oluştururum?
JSON formatında bir Kubernetes kaynak tanımınız varsa (kubectl get deployment my-app -o json, bir API yanıtı veya Terraform kaynak bloğundan), onu giriş alanına yapıştırın. 2 boşluk girinti (varsayılan) ve Otomatik tırnak (varsayılan, Norway sorununu ele alır) seçin. YAML çıktısı anında kubectl apply -f için hazır olacaktır. Ayrıca dosyayı .yaml uzantısıyla kaydetmek için İndir'e tıklayabilir ve doğrudan kubectl apply -f - üzerinden kullanabilirsiniz. Yukarıdaki K8s Deployment örneği, yükleyip değiştirebileceğiniz tam bir deployment manifest'ini göstermektedir.
Docker Compose JSON'unu YAML'a nasıl dönüştürürüm?
Docker Compose JSON'unuzu giriş alanına yapıştırın. 2 boşluk girinti (Docker Compose standardı) ve Blok stili kullanın. Çıktı YAML'ı docker compose up, docker compose config ve Docker Stack ile uyumludur. Yaygın bir senaryo, çalışan bir servis yığınının yapılandırmasını docker inspect ile dışa aktarmak ve ardından compose.yaml dosyasına dönüştürmektir. Yukarıdaki Docker Compose örneği, portlar, ortam değişkenleri, birimler ve depends_on içeren tam servis tanımlarını içerir.
2^53'ten büyük JSON sayıları YAML'a dönüştürülürken hassasiyetini kaybeder mi?
Evet. Bu, JavaScript'in temel sınırıdır: JavaScript'in Number türü IEEE 754 çift duyarlıklı kayan nokta değeri kullanır ve yalnızca 2^53 - 1'e kadar (9007199254740991) olan tam sayıları hassas biçimde temsil edebilir. Bu sınırı aşan tam sayılar — Kubernetes'in resourceVersion alanları gibi (sunucu tarafında int64'tür) — JSON.parse() tarafından ayrıştırılırken sessizce yuvarlama yapılır. Bu sorun, yalnızca bu araçla değil, tüm tarayıcı tabanlı JSON araçlarıyla yaşanır. Güvenli geçici çözüm, büyük tam sayıları dönüştürmeden önce JSON'da dize olarak saklamaktır ("resourceVersion": "9007199254740993").
Dönüştürücü JSON'daki orijinal anahtar sırasını korur mu?
Evet. Bu araçta kullanılan eemeli/yaml kütüphanesi, tüm modern JavaScript motorlarında (V8, SpiderMonkey, JavaScriptCore) JSON.parse() davranışıyla eşleşen ekleme sırası koruma özelliğine sahiptir. Anahtarlar YAML çıktısında JSON girişinde göründükleri sırada yer alır. Bu, alan sıralamasının okunabilirlik ve diff açısından genellikle önemli olduğu Kubernetes manifest'leri ve OpenAPI spesifikasyonları için kritik öneme sahiptir.
JSON mu yoksa YAML mı kullanmalıyım?
JSON kullanın: API ve web servisi geliştirirken (JSON evrensel veri değişim formatıdır), makine ayrıştırma hızı önemli olduğunda, katı tür güvenliğine ihtiyaç duyduğunuzda veya tüketici bir JavaScript/TypeScript uygulaması olduğunda. YAML kullanın: insan tarafından düzenlenmesi amaçlanan yapılandırma dosyaları yazarken (Kubernetes manifest'leri, CI/CD pipeline'ları, Ansible playbook'ları, Helm değerleri), yapılandırmanızda yorum satırı eklemek istediğinizde veya okunabilirlik katılıktan daha önemli olduğunda. Kullanışlı bir kural: makine önce yazıyor veya okuyorsa JSON; insan yazıyor, makine okuyorsa YAML kullanın.
JSON'u komut satırından YAML'a nasıl dönüştürürüm?
En yaygın yaklaşım yq ve jq'yu birleştirmektir. yq'yu (Mike Farah sürümü, Python sürümü değil) yükleyin: macOS'ta brew install yq veya Linux için wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/local/bin/yq. Ardından çalıştırın: cat input.json | yq -P (YAML olarak güzel yazdırmak için). Alternatif olarak: yq -o yaml input.json veya cat input.json | python3 -c "import sys, json, yaml; yaml.dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)". Kubernetes için özellikle: kubectl get deployment my-app -o yaml doğrudan cluster API'sinden dönüştürür.
Python, Node.js veya Go'da JSON'u YAML'a nasıl dönüştürürüm?
Python'da: import json, yaml; yaml.dump(json.load(open('input.json')), open('output.yaml', 'w'), default_flow_style=False) — PyYAML kullanarak, ya da gidiş-dönüş sadakati için ruamel.yaml. Node.js'de: import { Document } from 'yaml'; const doc = new Document(JSON.parse(input), { version: '1.1' }); const result = doc.toString({ indent: 2, lineWidth: 0 }) — bu araçta kullanılan kütüphane ve yaklaşımın aynısı. Go'da: import gopkg.in/yaml.v3; json.Unmarshal(jsonBytes, &data); yaml.Marshal(data) — Go YAML v3'ün varsayılan olarak YAML 1.1 kullandığını ve Norway sorunlu dizelerin otomatik olarak tırnaklanaacağını unutmayın.
Bu aracı kullanırken JSON verilerim sunucuya gönderiliyor mu?
Hayır. Tüm dönüştürme işlemi tamamen tarayıcınızda JavaScript kullanılarak gerçekleşir. JSON verileriniz ağ üzerinden iletilmez, hiçbir sunucuda saklanmaz ve kayıt altına alınıp analiz edilmez. Bu, aracı API anahtarları, veritabanı kimlik bilgileri, dahili yapılandırma dosyaları, üretim Kubernetes manifest'leri ve diğer hassas verilerle güvenle kullanmanızı sağlar. Araç, girdi verileriniz için cookie kullanmaz ve yapıştırmalarınızı yakalayacak üçüncü taraf analitik hizmetleri içermez. Bunu tarayıcınızın Ağ sekmesini açarak doğrulayabilirsiniz — JSON yapıştırdığınızda sıfır istek tetiklendiğini göreceksiniz.
JSON girişi için dosya boyutu sınırı var mı?
Sabit bir dosya boyutu sınırı yoktur; ancak 200KB'ı aşan büyük girişler otomatik olarak canlı dönüştürmeden manuel moda geçer. Manuel modda, bir Dönüştür düğmesi görünür ve dönüştürme yalnızca siz tıkladığınızda çalışır — bu, her tuş vuruşunda tarayıcının ana iş parçacığının 200-500ms bloke olmasını önler. Çok büyük JSON dosyaları için (birden fazla megabayt) daha iyi performans için yq veya jq gibi komut satırı araçlarını kullanmayı düşünün. Araç, tam Kubernetes ad alanı dökümleri, büyük OpenAPI spesifikasyonları ve çok servisli Docker Compose dosyaları gibi tipik gerçek dünya yüklerini verimli biçimde işler.