JSON, yapılandırılmış veri için tek format değil — YAML, CSV, XML ve TOML her biri farklı bir ihtiyaçtan doğdu, ve aralarında dönüştürme yapmak, özellikle eski XML tabanlı sistemleri modern JSON API'lerle konuşturmak gerektiğinde sıkça karşılaşılan pratik bir iş.
Her formatın işi ne
- YAML — süslü parantez yerine girinti kullanır, CI/CD hatları, Kubernetes ve Docker Compose dosyalarının standardı.
- CSV — düz ve tablo şeklinde, tablolama programları ve analiz araçları için ortak payda.
- XML — daha eski, öznitelik ve ad alanlarına sahip, SOAP servislerinin ve Türkiye'deki birçok kurumsal/kamu sisteminin altyapısında hâlâ kullanılıyor.
- TOML — belirsizlik olmaması ve elle düzenlemesi kolay olması için tasarlandı, Rust'ın
Cargo.tomldosyasıyla tanınır.
Dönüşümde neler kaybolabilir
Her dönüşüm aynı derecede güvenli değil. JSON → CSV, iç içe geçmiş yapıyı kaybeder: derin nesneler ve farklı uzunluktaki diziler dikdörtgen bir tabloya düzgün oturmaz, bu yüzden önce düzleştirilmesi (flatten) veya sadeleştirilmesi gerekir. JSON ↔ YAML ve JSON ↔ TOML ise neredeyse her zaman kayıpsızdır, çünkü ikisi de iç içe yapıları JSON ile aynı şekilde destekler.
Anahtar adlarında büyük/küçük harf dönüşümü tuzağı
Türkçede "I" harfinin küçük hâli noktasız "ı", "İ" harfinin küçük hâli ise noktalı "i"dir — İngilizce'deki standart "I ↔ i" eşleşmesinden farklı. Bu yüzden anahtar adlarını (örneğin id veya İsim) Türkçe sistem yerel ayarıyla büyük/küçük harfe çeviren bir kod, beklenmedik şekilde farklı bir anahtar üretebilir; JSON, YAML, CSV başlıkları arasında anahtar adlarını dönüştürürken harf büyütme/küçültme işlemini yerel ayardan bağımsız (invariant) yapmak, bu tür sessiz hataları önler.
YAML'de otomatik tip tahmini tuzağı
YAML ayrıştırıcısı tırnaksız bir değerin türünü tahmin etmeye çalışır: version: 1.20 sondaki sıfırı kaybederek 1.2 sayısına dönüşebilir, NO gibi bir metin ise YAML 1.1 kurallarına göre boolean false değerine dönüşebilir. Metin olarak kalması gereken değerleri JSON'a dönüştürmeden önce tırnak içine almak gerekir.
Pratikte ne işe yarar
- YAML bekleyen bir araçtan JSON bekleyen bir araca yapılandırma taşımak, ya da tam tersi.
- API'den gelen veriyi tablolama programında hızlıca incelemek için CSV'ye aktarmak.
- Eski bir XML/SOAP sistemini modern bir JSON API ile bağlamak.