YAML'i JSON'a ve Geri Dönüştür
YAML dosyalarını JSON'a veya JSON'u YAML'e anında dönüştürün — geliştiriciler için ücretsiz araç.
Dosyanız cihazınızda kalır
Sonradan silinecek bir şey yok
Hat ve gizli anahtar dosyaları için güvenli
Her modern tarayıcıda çalışır
Nasıl çalışır
- 1
YAML ya da JSON yapıştırın
Bir hat tanımı, bir Kubernetes manifestosu, bir compose dosyası, bir dil dosyası ya da bir API yükü.
- 2
Uyarıları okuyun
Yeniden türlendirilen değerler, kaybolacak yorumlar ve yinelenen anahtarlar çıktıyı almadan önce listelenir.
- 3
Sonucu kopyalayın
Bir depoya, bir istek gövdesine, bir yapılandırma dosyasına ya da bir test verisine taşıyın.
Neden bu araç
Tahmin edilen türler işaretlenir
YAML’in mantıksal, sayı ya da tarih olarak okuyacağı her tırnaksız değer dönüşümden önce size gösterilir.
Norveç sorunu yakalanır
Çıplak bir NO, false sözcüğünden çok daha sık bir ülke kodudur ve hangisini aldığınız size söylenir.
Baştaki sıfırlar hayatta kalır
Telefon numaraları, posta kodları ve kimlik numaraları sekizlik yorumun yiyeceği sıfırı korur.
Yorum kaybı bildirilir
JSON’da yorum yoktur; kaçının yok olacağı size söylenir, bunu incelemede keşfetmezsiniz.
Çapalar ve takma adlar açıklanır
Paylaşılan düğümler JSON’a giderken açılır ve açılım gösterilir, böylece arkanızdan hiçbir şey değişmez.
Hiçbir şey tarayıcıdan ayrılmaz
Hat tanımları, manifestolar ve senaryolar bu sayfada dönüştürülür ve hiçbir yere yüklenmez.
YAML değerlerinizin ne anlama geldiğini tahmin eder ve tahminlerin ünlü kurbanları vardır
JSON sizden bir değerin ne olduğunu söylemenizi ister: tırnaklar bir dizi yapar, çıplak rakamlar bir sayı yapar ve hiçbir şey belirsiz değildir. YAML ise çıkarım yapar ve bu çıkarım, biçimdeki en büyük sürpriz kaynağıdır. En bilinen durumun bir adı bile var — Norveç sorunu. Bir ülke kodu listesi yazın; `NO` girdisi Norveç’in beklediği dizi olarak gelmez, YAML 1.1 kurallarıyla mantıksal false olarak gelir; çünkü şartname `y`, `yes`, `n`, `no`, `on`, `off`, `true` ve `false` sözcüklerini her büyük küçük yazımıyla mantıksal değişmez sayar. Aynı kural Ontario’nun `ON` kodunu true yapar, bir sütun dolusu `Y` ve `N` yanıtını mantıksal değere çevirir, bir kimya veri kümesindeki `NO` girdisini false yapar. Durum daha da kötüleşir, çünkü ayrıştırıcılar aynı fikirde değildir: YAML 1.2 listeyi yalnızca `true` ve `false` ile sınırladı, ama pek çok yazılım hâlâ 1.1’i ya da arada bir şeyi uyguluyor; dolayısıyla aynı dosya Python’da, Go’da ve Ruby’de farklı anlamlara geliyor. Çözüm tek bir tırnak karakteri, zor olan kısım ise ona nerede ihtiyacınız olduğunu bilmek. Buradaki uyarılar tam da bunun için var.
Türkiye’de her telefon numarası bu tuzağa basar: baştaki sıfır
Sürprizlerin ikinci ailesi birincisinden daha sessizdir, çünkü hata değil bir değer üretir — ve Türkçe yazan ekipler bu aileyle hemen her veri dosyasında karşılaşır. YAML 1.1’de baştaki sıfırın anlamı vardır: `0755` sekizliktir ve 493 değerini verir; dosya izni kastettiyseniz doğru, başka her durumda yanlış. Türkiye’de bütün cep telefonu numaraları sıfırla başlar, dolayısıyla `0532` ile açılan tırnaksız bir numara artık o dizi değildir. Üstelik burada işler daha da karışır: sekizlik sayı sisteminde 8 ve 9 rakamları yoktur, yani `0532` gibi bir numara geçerli sekizlik bile değildir — ayrıştırıcıların bir kısmı hata verir, bir kısmı sessizce diziye geri döner, dolayısıyla aynı dosya bir makinede sorunsuz yüklenir ve başka bir makinede patlar. Aynı sorun sıfırla başlayan posta kodlarını, banka şube kodlarını ve sıfır dolgulu her kimlik numarasını vurur. Sürüm numaraları başka türlü zarar görür: `1.10` bir ondalıktır ve ondalıklar sondaki sıfırı korumaz, dolayısıyla değer 1.1 olarak geri gelir ve bağımlılık sabitlemeniz artık başka bir sürümü gösterir. Kural basit: bir sayı üzerinde aritmetik yapmayacaksanız o bir dizidir, tırnak içine alın.
Girinti sözdizimidir ve sekme karakterine asla izin verilmez
YAML, yapı için girintiyi Python gibi kullanır ama Python’da olmayan bir kuralla: sekme karakterleri girinti olarak, kesinlikle ve her yerde yasaktır. Şartnamenin katı davrandığı ender yerlerden biri budur ve yaygın araçlardaki en yardımsever olmayan hata iletilerinden birini üretir, çünkü kusurlu karakter görünmezdir. Sekme kullanacak biçimde ayarlanmış bir düzenleyiciden yapıştırılan, bir uçbirimden kopyalanan ya da bir belge sayfasından alınan bir blok, ekranda hiçbir şeyin açıklamadığı bir nedenle ayrıştırılamaz. Pratikte daha çok önem taşıyan ikinci bir sonuç var: girinti anlam taşıdığı için, bir bloğu bir dosyadan başka bir dosyaya farklı bir iç içelik derinliğinde güvenle yapıştıramazsınız ve iki YAML dosyasını iki listeyi birleştirir gibi birleştiremezsiniz. Tek bir boşluk kayması bir anahtarı bir üst öğeden başkasına taşır ve sonuç genellikle hâlâ geçerli YAML’dir — sorunsuz ayrıştırılan ve amaçlamadığınız bir şeyi tarif eden bir belge. Yapıyı incelemek için JSON’a dönüştürmenin gerçekten yararlı bir alışkanlık olmasının nedeni bu arıza biçimidir.
JSON’a dönüştürmek bir şeyleri kaybettirir ve özleyeceğiniz şey yorumlardır
YAML çoğu zaman JSON’un bir üst kümesi diye tarif edilir ve veri için bu neredeyse doğrudur — ama yalnızca veri için. YAML’in eklediği özellikler gidiş dönüşten sağ çıkmaz. Yorumlar bariz ve acı verici kayıptır: bir Kubernetes manifestosu, bir CI hattı ya da bir Ansible senaryosu tipik olarak yarı yarıya açıklamadır ve JSON üzerinden bir yolculuk bunun her satırını sessizce siler; bir gözden geçiren böylece gerekçesi buharlaşmış bir yapılandırmaya bakar hâle gelir. İkinci kayıp çapalar ve takma adlardır. YAML bir düğümü `&defaults` ile bir kez tanımlamanıza, `*defaults` ile ona atıfta bulunmanıza ve birleştirme anahtarıyla başka eşlemelerin içine karıştırmanıza izin verir; JSON’da böyle bir kavram yoktur, dolayısıyla dönüşüm her atfı bir kopyaya açmak zorundadır. Belge hâlâ aynı anlama gelir, ama paylaşılan tanım gitmiştir ve beş yeri değiştirmesi amaçlanan gelecekteki bir düzenleme artık tek bir yeri değiştirir. YAML ayrıca tek akışta birden çok belgeye ve dizi olmayan anahtarlara izin verir — ikisinin de JSON karşılığı yoktur. Bu araç bunları sessizce yapmak yerine her birini bildirir.
Bir YAML ayrıştırıcısından nesne kurması istenebilir ve bu bir kod çalıştırma açığıdır
YAML’i JSON’dan ayıran güvenlik özelliği budur ve açıkça söylemekte yarar var, çünkü varsayılanlar tarihsel olarak yanlıştı. YAML, ayrıştırıcıya hangi türü kuracağını söyleyen etiketleri destekler ve birkaç dil bağlaması bunu birebir uyguladı: `!!python/object/apply:os.system` içeren bir belge, saf bir yükleyiciye o işlevi sizin verdiğiniz argümanlarla çağırmasını söyler. PyYAML’de `load` adlı işlev yıllarca tam olarak bunu yaptı, `safe_load` ise yapmadı; yani bir yapılandırma dosyasını adı en bariz görünen işlevle okumak, bir saldırgan dosyayı etkileyebiliyorsa uzaktan kod çalıştırma anlamına geliyordu. Aynı hata sınıfı Ruby’de, SnakeYAML üzerinden Java’da ve .NET seri kaldırıcılarında da ortaya çıktı. Ders YAML’in ötesine geçer: hangi sınıfın örnekleneceğini tarif edebilen her biçim bir veri biçimi değil bir kod biçimidir ve güvenilmez girdi, düz değerler, diziler ve eşlemelerle sınırlı bir yükleyiciden geçmelidir. Bu araç hiçbir şey kurmaz — düz veriye ayrıştırır ve orada durur.
Kimlik bilgileri YAML’de yaşar; yerel dönüştürmenin gerekçesi budur
YAML’le gerçekte ne yazıldığına bakın, dosyayı kendi makinenizde tutma gerekçesi kendini kurar. YAML altyapının biçimidir: sürekli tümleştirme hatları, Kubernetes manifestoları ve gizli anahtarları, Helm değerleri, docker-compose dosyaları, Ansible senaryoları ve envanterleri, Terraform değişken dosyaları, servis tanımları. Bir CI yapılandırması, çoğu depoda mevcut en yoğun kimlik bilgisi taşıyan dosyadır — kayıt defterini, dağıtım hedefini ve ortamları adlandırır ve genellikle belirteçlere, onları açan değişken adlarıyla atıfta bulunur. Bir Kubernetes Secret nesnesi şifreli değil base64 kodludur, yani fazladan bir adımı olan düz metindir. Ve insanlar bir dönüştürücüye tam olarak bu dosyalardan biri hata verdiğinde ve incelenmesi gerektiğinde uzanır; dolayısıyla panodaki örnek gerçek olandır, sansürlenmiş bir örnek değil. Bu sayfadaki her şey tarayıcınızda JavaScript içinde çalışır ve hiçbir istek göndermez; yapıştırmadan önce geliştirici araçlarınızın ağ panelini açın ve sayacın kıpırdamadığını izleyin.
Kaçınılması gereken yaygın hatalar
- Bir ülke kodunu ya da kısaltmayı tırnaksız bırakmak. YAML 1.1 kurallarında `NO`, `ON`, `Y` ve `N` mantıksal değişmezlerdir; Norveç false, Ontario true olur.
- Telefon numarasını tırnaksız yazmak. Türkiye’de her numara sıfırla başlar ve baştaki sıfır sekizlik anlamına gelir; üstelik sekizlikte 8 ve 9 rakamları yoktur, dolayısıyla ayrıştırıcılar ne yapacakları konusunda ayrışır.
- Bir sürümü çıplak sayı olarak sabitlemek. `1.10` bir ondalıktır ve ondalıklar sondaki sıfırı korumaz, dolayısıyla değer 1.1 olarak döner ve başka bir sürümü gösterir.
- Sekme karakteriyle girintilemek. Sekmeler YAML’de her yerde girinti olarak yasaktır ve karakter görünmez olduğu için hata iletisi bunu size söylemez.
- Güvenilmez YAML’i izin verici bir yükleyiciyle yüklemek. Etiketler kurulacak bir sınıfı adlandırabilir; PyYAML ve SnakeYAML’de bir yapılandırma dosyası okumak böyle uzaktan kod çalıştırmaya dönüştü.
Karşılaştırma
| Ölçüt | Bu araç | Çevrimiçi dönüştürücüler | Bir komut satırı aracı |
|---|---|---|---|
| Dosya sunucuya gönderilir | Asla | Genellikle evet | Hayır |
| Tahmin edilen türler için uyarır | Evet | Hayır | Nadiren |
| Kaybolacak yorumları bildirir | Evet | Hayır | Hayır |
| Yinelenen anahtarları saptar | Evet | Nadiren | Değişir |
| Etiketlerden nesne kurar | Asla | Değişir | Yükleyiciye bağlı |
| Fiyat | Ücretsiz | Ücretsiz / ücretli katmanlar | Ücretsiz |
Özellikler
İki yön de var
YAML’den JSON’a ve JSON’dan YAML’e, girinti ve tırnak biçemi sizin denetiminizde.
Tür zorlaması uyarıları
Örtük türlendirilen her değer, YAML’in okuduğu ve sizin muhtemelen kastettiğiniz değerle birlikte listelenir.
Yinelenen anahtar tespiti
Tekrarlanan bir anahtar çoğu ayrıştırıcıda sessizce üzerine yazar; sessizce uygulanmak yerine bildirilir.
Çok belgeli akışlar
Üç tire ile ayrılmış belgeler işlenir ve düşürülmek yerine bir JSON dizisine eşlenir.
Çapa ve takma ad açılımı
Paylaşılan ve birleştirilen düğümler, birleştirme anahtarları dahil, açılımı görünür biçimde çözülür.
Büyük dosyalar desteklenir
Uzun bir manifesto ya da bütün bir çeviri dosyası yükleme ve boyut tavanı olmadan dönüşür.
Kurulacak bir şey yok
Derleme aracı yok, çalışma zamanı yok, bağımlılık yok — web sayfasında çalışır.
Arapça ve RTL hazır
Sekiz dilde tam arayüz, sağdan sola Arapça dahil.
Varsayılan olarak güvenli
HTTPS üzerinden sunulur; içerik takibi ve üçüncü taraf yüklemesi yoktur.
Kimler kullanıyor
Platform ve DevOps mühendisleri
Çapalar açıldıktan sonra bir manifestonun gerçekte ne dediğini denetlemek.
Sunucu geliştiricileri
Bir JSON yükünü okunabilir bir yapılandırma dosyasına çevirmek ya da tersi.
Yerelleştirme ekipleri
Çeviri dosyalarını YAML tabanlı bir çerçeveyle JSON tabanlı biri arasında taşımak.
Hat hatası arayan herkes
Ayrıştırıcının mantıksal değer olarak okuduğu tırnaksız değeri bulmak.
Sıkça Sorulan Sorular
Hayır. Her şey tarayıcınızda yerel çalışır — metniniz asla yüklenmez, saklanmaz veya paylaşılmaz.
Evet — tamamen ücretsiz, hesap ve sınır yok.