JSON ve YAML: aynı veri, iki farklı yazım
JSON (JavaScript Object Notation) ve YAML (YAML Ain't Markup Language) aynı türden veriyi taşır: anahtar-değer eşlemeleri, listeler, metinler, sayılar, mantıksal değerler ve boş değer. Aradaki fark yazım biçimindedir. JSON süslü parantez, köşeli parantez, çift tırnak ve virgülle kesin bir yapı kurar; web servislerinin, tarayıcıların ve hemen her programlama dilinin ortak dilidir. YAML ise girintiye dayanır, çoğu zaman tırnak ve virgül istemez, yorum satırına izin verir; bu yüzden insanların elle düzenlediği yapılandırma dosyalarında tercih edilir. Docker Compose, Kubernetes manifestleri, GitHub Actions iş akışları, Ansible görevleri, OpenAPI belgeleri ve pek çok statik site üreticisinin ayar dosyası YAML ile yazılır.
Bir API yanıtını yapılandırma dosyasına taşımak, bir YAML ayarını JSON bekleyen bir programa vermek, iki biçimi yan yana karşılaştırmak ya da bir belgedeki girinti hatasını bulmak istediğinizde dönüştürücüye ihtiyaç duyarsınız. YAML 1.2 sürümünden beri JSON'un bir üst kümesi olarak tasarlanmıştır; yani geçerli JSON metinleri, aynı nesnede yinelenen anahtar gibi birkaç uç durum dışında, aynı zamanda geçerli YAML'dır. Tersi doğru değildir: YAML'daki yorumlar, takma adlar ve çoklu belgeler JSON'da doğrudan karşılık bulmaz. Bu sayfa iki yönde de dönüşümü tarayıcınızda, hesap açmadan ve dosyanızı hiçbir yere göndermeden yapar.
Nasıl kullanılır?
- Dönüşüm yönünü seçin: "JSON → YAML" ya da "YAML → JSON". Dosya seçerseniz yön, uzantıya (.json, .yaml, .yml) göre kendiliğinden ayarlanır.
- Metni kutuya yapıştırın ya da dosyayı kutunun altındaki alana sürükleyip bırakın; dosya bilgisayarınızda okunur, hiçbir yere gönderilmez.
- Girinti, anahtar sıralama, satır genişliği ya da JSON küçültme gibi seçenekleri ayarlayıp dönüştür düğmesine basın; klavyede Ctrl + Enter da aynı işi yapar.
- Sonucu "Kopyala" ile panoya alın ya da .yaml / .json dosyası olarak indirin.
- Gidiş-dönüş denetimi için "Yönü değiştir" düğmesine basın: çıktı girişe taşınır ve hemen ters yönde dönüştürülür.
Seçenekler ne işe yarar?
- Girinti (2 ya da 4 boşluk): YAML'da iç içe düzeyleri, JSON'da biçimlendirilmiş çıktının girintisini belirler. YAML girintide sekme karakterine izin vermediği için yalnızca boşluk seçenekleri vardır.
- Anahtarları alfabetik sırala: YAML çıktısındaki tüm nesnelerin anahtarlarını, iç içe olanlar dâhil, Türkçe harf sırasına göre dizer. Sürüm kontrolünde gereksiz farkları azaltır. Dizilerin sırası değişmez, çünkü listede sıra anlam taşır.
- YAML satır genişliği: Varsayılan "kırma yok" seçeneği uzun metinleri tek satırda bırakır. 80 ya da 120 karakter seçerseniz uzun metinler katlanmış blok (
>-) biçiminde birkaç satıra bölünür; değer değişmez, yalnızca görünüm değişir. - Kök diziyi ayrı belgelere böl: JSON'un en dışı bir diziyse her öğe
---ile ayrılmış ayrı bir YAML belgesi olur. Birden çok Kubernetes kaynağını tek dosyada tutarken işe yarar. - JSON çıktısını küçült: YAML'dan üretilen JSON'u boşluksuz tek satıra indirir; bir ortam değişkenine yazılacak ya da ağ üzerinden gönderilecek veriler için uygundur.
- Tarihleri metin olarak koru: Açıkken
2026-01-01gibi değerler yazıldığı gibi metin kalır. Kapatırsanız tarih olarak yorumlanır ve ISO 8601 biçimine (2026-01-01T00:00:00.000Z) çevrilir.
YAML 1.2 davranışı: yes/no, tarihler ve baştaki sıfırlar
Dönüştürücü, YAML 1.2.2 belirtiminin varsayılan olarak önerdiği Core şemayı izleyen js-yaml 4 kütüphanesini kullanır. Bu, eski YAML 1.1 araçlarına alışkın olanları şaşırtabilecek birkaç sonuç doğurur. Aşağıdaki kurallar belirtimin "Core Schema" bölümündeki düzenli ifadelerle birebir uyumludur:
- yes, no, on, off mantıksal değer değildir. YAML 1.2'de yalnızca
truevefalse(ve True, TRUE, False, FALSE yazımları) mantıksal değerdir.cevap: yessatırı JSON'da"yes"metni olur. Tersine, JSON'daki "yes" metni YAML'a'yes'biçiminde tırnaklı yazılır; böylece YAML 1.1 kullanan eski bir ayrıştırıcı da onu metin olarak okur. - Baştaki sıfır kaybolabilir. YAML 1.2'de tırnaksız
0123onluk tam sayıdır ve JSON'da123olur. Posta kodu, telefon ya da sicil numarası gibi baştaki sıfırın önemli olduğu değerleri YAML'da tırnak içinde yazın. JSON'dan YAML'a çevirirken metin olan "0123" kendiliğinden tırnaklanır, yani bilgi kaybolmaz. - Tarihe benzeyen değerler. YAML 1.2 Core şemasında tarih türü yoktur; js-yaml ise eski sürümlerle uyum için
2026-01-01gibi değerleri tarih sayabilir. Aracımız varsayılan olarak bunları metin bırakır; isterseniz seçenekten değiştirebilirsiniz. - .inf ve .nan. YAML'da sonsuz ve tanımsız sayı yazılabilir ama JSON'da karşılıkları yoktur; bu değerler null yazılır ve sonuç kutusunda ayrıca belirtilir.
- Çok büyük tam sayılar. JSON standardı RFC 8259, yalnızca ±(2⁵³−1) aralığındaki tam sayıların her ortamda aynı okunacağını söyler. Daha uzun sayılar tarayıcıda yuvarlanabilir; araç bu durumda uyarı verir.
Örnek bir YAML girişi:
cevap: yes
posta_kodu: 02100
il_kodu: "02"
etkin: true
Bu girişin JSON karşılığı:
{"cevap": "yes", "posta_kodu": 2100,
"il_kodu": "02", "etkin": true}
Çoklu belge, takma adlar ve birleştirme anahtarları
Bir YAML dosyası --- satırlarıyla ayrılmış birden çok belge içerebilir. Araç her belgeyi okur ve sonucu bir JSON dizisi olarak verir: a: 1, ---, b: 2 girişi [{"a":1},{"b":2}] olur. Yalnızca --- ya da yorumdan oluşan boş belgeler atlanır ve kaç tanesinin atlandığı yazılır. Tek belgeli YAML ise dizi olarak değil, doğrudan o belgenin değeri olarak çevrilir.
YAML'ın &çapa ve *takma-ad özelliği aynı veriyi tekrar yazmadan birden çok yerde kullanmanızı sağlar; <<: *varsayilan biçimindeki birleştirme anahtarı da bir eşlemenin alanlarını başka bir eşlemeye kopyalar. JSON'da bu kavramlar olmadığından dönüştürücü takma adları açar ve her kullanım yerine verinin tam kopyasını yazar. Kötü niyetli bir belge, iç içe takma adlarla küçük bir dosyadan milyarlarca öğe üretebilir; bu saldırı "milyar gülüş" adıyla bilinir. Araç açılmış öğe sayısını dönüştürmeden önce hesaplar ve beş milyonu aşan belgeleri tarayıcınızı kilitlemeden reddeder. Kendini içeren döngüsel takma adlar da yakalanır.
JSON'dan YAML'a çevirirken çıktıda çapa ve takma ad kullanılmaz; her değer açıkça yazılır. Böylece çıktı, takma adları desteklemeyen basit YAML okuyucularında da sorunsuz açılır.
Hata mesajları nasıl okunur?
Geçersiz JSON'da hata, satır ve sütun numarasıyla ve ne yapmanız gerektiğini anlatan bir cümleyle gösterilir: tırnaksız anahtar, tek tırnak, fazladan virgül, kapatılmamış parantez ya da sıfırla başlayan sayı gibi. Örneğin {a:1 girişi "satır 1, sütun 2: Anahtar çift tırnak içinde yazılmalı" uyarısını verir. Geçersiz YAML'da js-yaml'ın bildirdiği konum kullanılır ve İngilizce teknik mesaj Türkçe bir açıklamaya çevrilir: girinti hatası, girintide sekme karakteri, aynı anahtarın iki kez yazılması, kapatılmamış tırnak ya da tanımlanmamış takma ad gibi. Her iki durumda da hatalı satır ve çevresi bir alıntı olarak gösterilir, imleç metin kutusunda hatalı karaktere gider. JSON yönünde yanlışlıkla YAML yapıştırdıysanız araç bunu fark eder ve yönü değiştirmenizi önerir.
Güvenlik ve gizlilik
YAML ayrıştırıcıları geçmişte ciddi güvenlik açıklarına konu oldu; bazı kütüphaneler !!python/object ya da !!js/function gibi etiketlerle belgenin içinden kod çalıştırılmasına izin veriyordu. Bu araç yalnızca güvenli veri türlerini tanıyan şemayla çalışır: eşleme, liste, metin, sayı, mantıksal değer ve null; bunlara ek olarak birleştirme anahtarı, ikili veri (!!binary), küme ve sıralı eşleme. Bunların dışındaki her etiket açık bir hata mesajıyla reddedilir. İç içe geçme derinliği 100 düzeyle sınırlıdır. Çıktı sayfaya HTML olarak değil düz metin olarak yazılır; YAML'ın içinde HTML ya da betik kodu olsa bile tarayıcı onu çalıştırmaz, yalnızca harf harf gösterir.
Dönüşüm baştan sona tarayıcınızda gerçekleşir. Yapıştırdığınız metin ya da seçtiğiniz dosya sunucuya gönderilmez, kaydedilmez, çerez ya da analiz koduyla izlenmez. API anahtarı, veritabanı parolası ya da müşteri verisi içeren yapılandırma dosyalarını da gönül rahatlığıyla dönüştürebilirsiniz. Kütüphane sitenin kendi sunucusundan sabit sürümle yüklenir; sayfa bir kez açıldıktan sonra internet bağlantısı olmadan da çalışır.
Dosya kodlaması, BOM ve büyük dosyalar
Dosyalar UTF-8 olarak okunur. Bazı Windows programlarının dosya başına eklediği BOM (bayt sırası işareti) kendiliğinden atılır; ş, ğ, ı, İ, ç, ö, ü gibi harfler hem anahtarlarda hem değerlerde bozulmadan korunur. BOM ile kaydedilmiş UTF-16 dosyaları da tanınır. UTF-8 olmayan eski dosyalar Türkçe Windows kodlamasıyla (Windows-1254) okunur ve bu durum ayrıca belirtilir. İndirilen dosyalara BOM eklenmez; RFC 8259 de JSON metinlerinin başına BOM konmamasını ister.
5 MB'ı aşan metinlerde dönüşüm birkaç saniye sürebilir; araç bunu önceden haber verir ve ekrandaki önizlemeyi kısaltır, ama kopyalanan ve indirilen çıktı her zaman tamdır. 50 MB üstü dosyalarda tarayıcı uzun süre yanıt vermeyebilir; bu boyutlarda dosyayı parçalara bölmenizi ya da güçlü bir bilgisayar kullanmanızı öneririz.
Neden Bilişim Ajans aracı?
- Veri yüklenmez. Dönüşüm tarayıcıda yapılır, hiçbir ağ isteği gönderilmez.
- İki yön tek sayfada. "Yönü değiştir" düğmesiyle gidiş-dönüş denetimi saniyeler sürer.
- Açıklayıcı Türkçe hatalar. Satır, sütun, hatalı satırın alıntısı ve çözüm önerisi birlikte verilir.
- Güvenli varsayılanlar. Yalnızca veri türleri işlenir; takma ad şişirmesine karşı sınır vardır.
- Ücretsiz ve sınırsız. Kayıt, günlük kota ya da filigran yoktur.
Sık sorulan sorular
JSON'u YAML'a çevirince veri kaybı olur mu?
Değerler korunur. JSON'daki her değerin YAML'da birebir karşılığı vardır; araç yanlış yorumlanabilecek metinleri ('yes', '0123', 'null', '2026-01-01' gibi) tırnak içine alarak yazar, böylece JSON → YAML → JSON gidiş-dönüşünde aynı veri elde edilir. Girinti, sayıların yazımı (1.0 yerine 1 gibi) ve yalnızca rakamdan oluşan anahtarların ("1", "2" gibi) sırası değişebilir. Tarayıcının sınırını aşan çok büyük sayılar ve aynı nesnede iki kez yazılmış anahtarlar istisnadır; araç bu durumlarda sonuç kutusunda ayrıca uyarır.
YAML'daki yorumlar JSON'a aktarılır mı?
Hayır. JSON'da yorum yazılamadığı için # ile başlayan açıklamalar dönüşümde düşer. Yorumları korumak istiyorsanız özgün YAML dosyanızı saklayın; ters yönde de yorum üretilmez.
"yes" ve "no" neden true/false olmadı?
YAML 1.2'de yalnızca true ve false (True, TRUE, False, FALSE yazımlarıyla) mantıksal değerdir; yes, no, on ve off sıradan metindir. Eski YAML 1.1 araçları bunları mantıksal sayıyordu. Mantıksal değer istiyorsanız YAML'da true ya da false yazın.
Birden çok belge içeren YAML nasıl çevrilir?
--- ile ayrılmış her belge JSON dizisinin bir öğesi olur; örneğin 'a: 1', '---', 'b: 2' girişi [{"a":1},{"b":2}] verir. Ters yönde "Kök diziyi ayrı belgelere böl" seçeneğini işaretlerseniz JSON dizisinin her öğesi ayrı bir YAML belgesine yazılır.
Dönüştürdüğüm dosya bir yere gönderiliyor mu?
Hayır. Metin ve dosyalar yalnızca tarayıcınızın belleğinde işlenir; sayfada yükleme, kayıt ya da izleme kodu yoktur. Sayfayı kapattığınızda veriler silinir.
Hata mesajındaki satır numarası neye göre?
Satır ve sütun 1'den başlar ve metin kutusundaki konuma karşılık gelir; imleç de oraya taşınır. YAML'da sorun çoğu zaman bir önceki satırın girintisinden kaynaklandığı için gösterilen alıntıda üstteki satırlara da bakın.
Baştaki sıfırım neden kayboldu?
YAML 1.2'de tırnaksız 0123 onluk bir tam sayıdır ve 123 olarak okunur. Posta kodu, telefon ya da sicil numarası gibi baştaki sıfırın önemli olduğu değerleri YAML'da tırnak içinde ("0123") yazın.
Kubernetes ya da Docker Compose dosyalarıyla çalışır mı?
Evet, bunlar standart YAML'dır; çoklu belgeli Kubernetes manifestleri JSON dizisine çevrilir. Yalnızca belirli araçlara özgü özel etiketler (bulut altyapı şablonlarındaki !Ref, !Sub ya da Compose dosyalarındaki !reset, !override gibi) güvenlik nedeniyle reddedilir; bulut şablonlarında bunların yerine uzun biçimleri (Ref:, Fn::Sub:) kullanabilirsiniz.
Telefonda ya da internetsiz çalışır mı?
Evet. Sayfa telefonda da çalışır. Tarayıcının "Uygulama olarak yükle" seçeneğiyle cihazınıza ekleyebilir, bir kez açtıktan sonra internet bağlantısı olmadan da kullanabilirsiniz.
İlgili araçlar
Kaynaklar: YAML 1.2.2 belirtimi (Core şema, bölüm 10.3), RFC 8259 – JSON, RFC 9512 – YAML ortam türü, js-yaml (MIT lisansı). Bağlantılar yalnızca tıkladığınızda açılır.
Veri entegrasyonu, API geliştirme, DevOps yapılandırması ya da kuruma özel yazılım ihtiyacınız varsa Bilişim Ajans ekibi yardımcı olur.