Bir DevOps mühendisi Kubernetes yapılandırmasını YAML olarak dışa aktarır ancak yalnızca JSON kabul eden bir API'ye göndermesi gerekir. Bir analist JSON formatında API yanıt verisi alır ancak elektronik tabloya ihtiyacı vardır. Bir veri bilimci veritabanından CSV dışa aktarır ancak web panosu için yapılandırılmış JSON'a ihtiyacı vardır.
Format dönüşümü sadece mekanik bir işlem değildir. Her format farklı ödünler verir ve çeviride nelerin kaybolduğunu anlamak, nasıl dönüştürüleceğini bilmek kadar önemlidir.
Üç format, üç felsefe
Her format farklı bir hedef kitle ve farklı bir sorun için tasarlanmıştır:
| Format | Doğum | Tasarım amacı | Temel felsefe |
|---|---|---|---|
| CSV | ~1972 | Programlar arası veri alışverişi | Maksimum basitlik — sadece satırlar ve sütunlar |
| JSON | 2001 | Web veri alışverişi | Katı kurallarla makine tarafından okunabilir yapılandırılmış veri |
| YAML | 2001 | Yapılandırma dosyaları | Minimum söz dizimiyle insan tarafından okunabilir yapılandırılmış veri |
CSV verinizin düz bir tablo olduğunu varsayar. Her değer bir dizedir. İç içe geçme, tipleme veya meta veri kavramı yoktur.
JSON verinizin yapıya sahip olduğunu varsayar — nesneler, diziler, tipler (dizeler, sayılar, booleanlar, null). Katı ve belirsizlikten uzaktır, bu da onu makineler için ideal ancak insanlar için ayrıntılı kılar.
YAML dosyayı bir insanın okuyup düzenleyeceğini varsayar. Süslü parantezler yerine girintileme kullanır, yorumları destekler ve daha esnek bir söz dizimine sahiptir. Teknik olarak YAML, JSON'un bir üst kümesidir — geçerli her JSON belgesi aynı zamanda geçerli bir YAML'dır.
YAML, JSON'un bir üst kümesidir Bir JSON belgesini doğrudan bir YAML ayrıştırıcısına yapıştırabilirsiniz ve çalışacaktır. Tersi doğru değildir — YAML'a özgü yorumlar, çıpalar ve çok satırlı dizeler gibi özelliklerin JSON karşılığı yoktur.
Gerçek dünya dönüşüm senaryoları
Yapılandırma göçü (JSON'dan YAML'a, YAML'dan JSON'a)
Bu en yaygın dönüşümdür. Farklı araçlar farklı yapılandırma formatları bekler:
- Docker Compose, Kubernetes, GitHub Actions, Ansible YAML kullanır
- package.json, tsconfig.json, ESLint JSON kullanır
- Araçlar arasında geçiş yapmak genellikle yapılandırma dönüşümü gerektirir
Bu dönüşüm veri içeriği için her iki yönde kayıpsızdır — ancak JSON'un yorum söz dizimi olmadığı için YAML yorumları JSON'a dönüştürülürken kaybolur.
Veri analizi (JSON'dan CSV'ye)
API yanıtları JSON formatında gelir. Analistlerin elektronik tablolara ihtiyacı vardır. Bu dönüşüm düz JSON dizileri için iyi çalışır — aynı anahtarlara sahip nesne dizileri doğal olarak satır ve sütunlara eşlenir.
Ancak iç içe veriler söz konusu olduğunda bozulur. address.city alanı ve skills dizisi olan bir JSON nesnesinin doğal bir CSV gösterimi yoktur. Dönüştürücü karar vermelidir: iç içe anahtarları düzleştirmek (address.city bir sütun olur), iç içe değerleri dize olarak serileştirmek veya onları atmak.
Veri içe aktarma (CSV'den JSON'a)
Ters senaryo: elektronik tablo verilerini bir web uygulamasına veya API'ye aktarma. CSV'den JSON'a dönüşüm, sütun başlıklarını anahtar olarak kullanan bir nesne dizisi oluşturur. Sorun şudur ki CSV'nin tip bilgisi yoktur — 42 sayısı, "42" dizesi ve true boolean'ı CSV'de hep sadece metindir. Dönüştürücü tipleri tahmin etmek zorundadır.
İnsan okunabilirliği (JSON'dan YAML'a)
Bazen sadece yoğun bir JSON yapılandırma dosyasını okunabilir kılmanız gerekir. YAML'a dönüştürmek temiz girintileme ve belgelendirme için yorum ekleme olanağı sağlar. Bu özellikle bir ekip tarafından sürdürülecek büyük yapılandırma dosyaları için değerlidir.
Dönüşümde neler kaybolur
Bu, hata ayıklama süresinden tasarruf sağlayan kritik bilgidir:
| Dönüşüm | Kaybolanlar |
|---|---|
| YAML'dan JSON'a | Yorumlar (JSON'da yorum söz dizimi yok) |
| JSON'dan CSV'ye | İç içe yapı (CSV düzdür), tipler (her şey metin olur), diziler |
| CSV'den JSON'a | Hiçbir şey (ancak tipler çıkarılmalıdır — "42" ve 42 farkı) |
| CSV'den YAML'a | Hiçbir şey (aynı tip çıkarımı sorunu) |
| JSON'dan YAML'a | Hiçbir şey (YAML, JSON'un üst kümesidir) |
| YAML'dan CSV'ye | Yorumlar, iç içe yapı, tipler, çıpalar/takma adlar |
Kalıp açıktır: CSV'ye yönelik dönüşümler en fazla bilgiyi kaybeder çünkü CSV en basit formattır. JSON ve YAML arasındaki dönüşümler neredeyse kayıpsızdır. Ve YAML yorumları YAML'dan çıkıldığında her zaman kaybolur.
Çift yönlü ve tek yönlü JSON-YAML ve YAML-JSON dönüşümleri etkili bir şekilde çift yönlüdür (yorumlar hariç gidiş-dönüş güvenlidir). JSON-CSV ve YAML-CSV dönüşümleri karmaşık veriler için tek yönlüdür — düz bir CSV'den iç içe yapıyı yeniden oluşturamazsınız.
Dönüştürürken yaygın tuzaklar
YAML'ın tip zorlama tuzakları
YAML belirli dizeleri otomatik olarak dize olmayan tipler olarak yorumlar. no kelimesi boolean false olur. yes kelimesi true olur. 1.0 dizesi ondalıklı sayı olur. NO (Norveç) gibi ülke kodları ünlü hatalara neden olmuştur. YAML'da belirsiz değerleri her zaman tırnak içine alın.
CSV sınırlayıcı ve kodlama karışıklığı
Tüm CSV'ler virgül kullanmaz. Avrupa CSV'leri sıklıkla noktalı virgül kullanır (çünkü birçok Avrupa sayı formatında virgüller ondalık ayracıdır). Sekmeyle ayrılmış değerler (TSV) başka bir varyantdır. Ve karakter kodlama uyumsuzlukları (UTF-8 ve Latin-1) aksanlı karakterleri bozar.
JSON'un sondaki virgül problemi
JSON sondaki virgüllere izin vermez. Bu geçerli JavaScript'tir: {"a": 1, "b": 2,} — ancak geçersiz JSON'dur. Tek bir sondaki virgül ayrıştırma hatasına neden olur.
Büyük veri seti performansı
Milyonlarca satırlı veri setleri için CSV, JSON veya YAML'dan önemli ölçüde daha verimlidir. JSON her değer için süslü parantezler, köşeli parantezler ve tırnak işaretleri ekler. 1 milyon satırlı bir CSV 50 MB olabilir; eşdeğer JSON 150 MB olabilir.
Baştan doğru formatı seçmek
Sonradan dönüştürmek yerine, en başta doğru formatı seçmek bilgi kaybını önler:
- Elektronik tablolar veya veritabanları için tablo verileri — CSV
- API'ler veya web uygulamaları için yapılandırılmış veri — JSON
- İnsanların düzenleyeceği yapılandırma — YAML
- Yorumlu karmaşık iç içe veri — YAML
- Sistemler arası veri alışverişi — JSON
Daha fazla bilgi
Tarayıcı tabanlı araçlarla JSON, YAML ve CSV arasında anında dönüşüm yapın:
- Veri Formatlarını Dönüştür — verinizi yapıştırın, hedef formatı seçin, sonucu indirin
- JSON Biçimlendirici — JSON'u doğrulayın, biçimlendirin ve küçültün
- JSON-CSV Dönüştürücü — JSON dizilerini elektronik tabloya hazır CSV'ye dönüştürün
- YAML-JSON Dönüştürücü — yorum farkındalığıyla YAML ve JSON arasında dönüştürün
