Skip to main content

JSON ve YAML Dönüştürücü

JSON ile YAML arasında iki yönlü dönüşüm. CI dosyalarını bozan YAML tuzaklarını gösterir: tırnaksız no değeri false olur, sürümler basamak kaybeder.

Veriler tarayıcınızdan çıkmazYayın: Temmuz 2026

Özet (TL;DR)

  • YAML 1.1 ayrıştırıcılarında tırnaksız no, off, yes, on, y ve n boolean olarak okunur; Norveç'in ülke kodu NO bu yüzden false olur.
  • Sürüm gibi görünen 1.10 değeri sayıya dönüşünce 1.1 olur ve sondaki hane geri gelmez.
  • YAML girintiyi anlamlı sayar ve girinti olarak sekme kabul etmez; bu araç sekmeyi ayrı bir hata koduyla bildirir.
  • JSON, YAML 1.2'nin alt kümesidir: elinizdeki her geçerli JSON dosyası aynı zamanda geçerli bir YAML dosyasıdır.

Tek bir kelime yüzünden bozulan CI dosyası

Pipeline bir sabah çalışmayı bıraktı ve dosyada değişen tek şey bir ülke listesine eklenen iki harfti. YAML geçerli, linter sessiz, hata mesajı yok. Sorun şu: country: NO satırı ayrıştırıcıdan country: false olarak çıkıyor. En çok zaman yediren hatalar genelde böyle oluyor, çünkü ortada düzeltilecek bir sözdizimi hatası yok, yalnızca sizin yazdığınızdan başka bir değer var.

YAML 1.1 boolean tuzağı

YAML 1.1, tırnaksız yazılmış sekiz kelimeyi boolean sayar: y, n, yes, no, true, false, on, off. Büyük küçük harf farkı da yok, yani NO, No ve no aynı kapıya çıkar. YAML 1.2 bu listeyi yalnızca true ve false ile sınırladı ama sahadaki ayrıştırıcıların büyük kısmı (PyYAML, libyaml, js-yaml'ın 1.1 kipi ve pek çok CI sağlayıcısı) hâlâ eski davranışı sürdürüyor.

yaml
# Yazdığınızcountry: NOdebug: offdeploy: y # Ayrıştırıcının okuduğucountry: falsedebug: falsedeploy: true # Doğrusucountry: 'NO'debug: 'off'deploy: 'y'

Bu araç JSON'dan YAML üretirken aynı kontrolü ters yönden yapıyor: boolean, sayı ya da null olarak yeniden okunacak her string tırnak içine alınıyor ve hangi anahtarda neden tırnak gerektiği uyarı olarak listeleniyor. Amaç sizi korumakla kalmayıp tuzağın nerede olduğunu göstermek, çünkü aynı dosyayı yarın elle düzenleyecek olan yine sizsiniz.

Uyarı

Anahtarlar da aynı kurala tabi. GitHub Actions dosyalarındaki on: bloğu tam olarak bu yüzden dikkat ister: bazı ayrıştırıcılar bu anahtarı true olarak okur ve iş akışı tetikleyicisi ortadan kaybolur.

Sürüm numaraları ve hane kaybı

Boolean kadar sinsi ikinci grup, sayıya benzeyen stringler. version: 1.10 satırı 1.1 float'ına dönüşür ve sondaki sıfır geri gelmez; 1.10 ile 1.1 farklı sürümlerse elinizde yanlış sürüm kalır. id: 007 dolgu sıfırlarını kaybeder. 1.2.3 gibi iki noktalı değerler sayı olarak okunmaz ama YAML 1.1'in altmışlık tabanı yüzünden 1:30 değeri 90 sayısına dönüşür.

YAML'da yazılanOkunan değerGüvenli yazım
country: NOfalse (boolean)country: 'NO'
version: 1.101.1 (sayı)version: '1.10'
id: 0077 (sayı)id: '007'
value: ~nullvalue: '~'
time: 1:3090 (altmışlık taban)time: '1:30'
Tırnaksız bırakıldığında tipi değişen değerler. Hiçbiri hata üretmez.

Girinti, sekme ve yapı

YAML'da girinti süslü parantezin yerini tutar, dolayısıyla boşluk sayısı doğrudan yapıyı belirler. Girinti için sekme kullanmak yasak: editörde hizalı görünen dosya, ayrıştırıcıda alakasız bir satırda patlar. Bu araç sekme girintisini tab-indent koduyla ve satır numarasıyla ayrı bildiriyor, çünkü genel bir "yapı hatası" mesajı sizi yanlış yere baktırır.

YAML'ın JSON'da olmayan iki rahatlığı daha var. Yorum satırları # ile yazılır ve yapılandırma dosyalarında bunun değeri büyük. Anchor ve alias mekanizması (&varsayilan ile tanımlayıp *varsayilan ile çağırmak) tekrar eden blokları bir kez yazmanızı sağlar. Bu tür referansları JSON'a çevirirken referans çözülür ve içerik kopyalanır, yani JSON tarafında artık bir tanım noktası kalmaz.

Hangi biçimi nerede kullanmalı

JSON, YAML 1.2'nin alt kümesi olduğu için ayrım teknik bir zorunluluktan çok kullanım alanı meselesi. Makineler arası veri taşımada JSON tercih edilir: dilbilgisi küçük, ayrıştırıcılar arasında sürpriz fark yok, her platformda yerleşik desteği var. İnsanın elle düzenlediği yapılandırma dosyalarında YAML öne çıkıyor, çünkü yorum yazabiliyorsunuz ve iç içe yapılar süslü parantez yığını olmadan okunabiliyor. Kubernetes manifestleri, CI tanımları ve Docker Compose dosyalarının YAML olması tesadüf değil.

Sıkça Sorulan Sorular

YAML dosyamdaki değer neden false oldu?
Büyük ihtimalle tırnaksız yazdınız ve YAML 1.1 kuralları o kelimeyi boolean saydı. no, off, n, false ve bunların her türlü büyük harfli yazımı bu gruba giriyor. Değeri tek tırnak içine alın: country: 'NO' yazdığınızda string olarak kalır.
YAML'da sekme kullanabilir miyim?
Girinti için kullanamazsınız, spesifikasyon bunu açıkça yasaklıyor. Satır içinde, bir değerin ortasında geçen sekme sorun değildir ama satır başındaki sekme ayrıştırıcıyı hata verdirir. Editörünüzü YAML dosyalarında sekmeyi iki boşluğa çevirecek şekilde ayarlayın.
JSON mu YAML mı kullanmalıyım?
API'ler ve sistemler arası veri alışverişi için JSON, insanın elle düzenlediği yapılandırma için YAML. JSON'un dilbilgisi küçük olduğu için ayrıştırıcılar arası davranış farkı da yok denecek kadar az; YAML'ın esnekliği ise bu yazıdaki tuzakların kaynağı.
JSON dosyasına yorum ekleyebilir miyim?
Standart JSON yorum desteklemez. YAML # ile yorum kabul eder, hatta yapılandırma dosyalarında YAML tercih etmenin en somut sebeplerinden biri budur. JSON'a çevirdiğinizde yorumlar kaybolur, çünkü karşılığı yok.
Dönüşümde anahtar sırası korunur mu?
Bu araçta korunur. JSON nesnelerinin anahtarları eklenme sırasıyla dolaşılır ve YAML çıktısı da aynı sırada üretilir. Ancak spesifikasyon açısından ne JSON nesneleri ne de YAML eşlemeleri sıralı sayılır, o yüzden başka bir araçtan geçen dosyada sıranın değişmesi standarda aykırı olmaz.

Bu aracı ve yazıyı hazırlayan: , Senior Software Engineer. Yayın: Temmuz 2026.

Mustafa Kürşad BAŞER

Yazılım Mühendisi

Karmaşık sorunları zarif çözümlerle buluşturan, öğrendiklerini paylaşarak değer katmayı seven bir yazılım mühendisi.

Hızlı Erişim

Bağlantı

© 2026 Mustafa Kürşad BAŞER. Tüm hakları saklıdır.