KeroTools

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ç.

Giriş
0 karakter
Çıktı

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. 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. 2

    Uyarıları okuyun

    Yeniden türlendirilen değerler, kaybolacak yorumlar ve yinelenen anahtarlar çıktıyı almadan önce listelenir.

  3. 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çütBu araçÇevrimiçi dönüştürücülerBir komut satırı aracı
Dosya sunucuya gönderilirAslaGenellikle evetHayır
Tahmin edilen türler için uyarırEvetHayırNadiren
Kaybolacak yorumları bildirirEvetHayırHayır
Yinelenen anahtarları saptarEvetNadirenDeğişir
Etiketlerden nesne kurarAslaDeğişirYü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.