Yükleme yok, %100 yerel, hesap yok

Makale

CSV, XML, JSON ve YAML Arasında Dönüştürme: Pratik Bir Rehber

CSV, JSON, XML ve YAML, veri akışlarında, yapılandırma dosyalarında ve API'lerde geliştiricilerin en sık karşılaştığı dört formattır. Veri modelleri örtüştüğünde dönüştürme basittir; örtüşmediğinde ise beklenmedik veri kayıpları yaşanabilir. Bu rehber, her formatın neyi temsil edip edemediğini, dönüştürme sırasında hangi bilgilerin kaybolduğunu ve sessiz veri bozulmalarına yol açan kodlama tuzaklarını ele almaktadır. Bu sitedeki data-converter aracı dördünden üçünü (CSV, JSON ve YAML) tamamen tarayıcıda işler; buradaki XML bölümleri, veriyi elle veya ayrı bir araçla taşırken arka plan bilgisi olarak sunulur.

Dört Format ve Veri Modelleri

CSV, veriyi satır ve sütunlardan oluşan düz bir tablo olarak düzenler. İlk satır genellikle sütun adlarını içerir; sonraki her satır bir kayıttır. İç içe geçme, tür bilgisi ve hücreler içindeki düz metni aşan herhangi bir standart yoktur. Her değer, tüketen uygulama bir tür uygulamadığı sürece dizedir. JSON, veriyi nesneler (anahtar-değer eşlemeleri) ve dizilerden oluşan bir ağaç olarak modeller. Değerler dizeler, sayılar, boolean değerler, null, iç içe nesneler veya herhangi bir derinlikte diziler olabilir. Bu sayede tek bir JSON belgesi, gömülü adres nesneleri, satır öğesi dizileri ve türlendirilmiş sayısal toplamlar içeren bir müşteri kaydını temsil edebilir. XML, veriyi öğe ağacı olarak modeller. Her öğe adlandırılmış nitelikler taşıyabilir ve alt öğeler ya da metin içeriği barındırabilir. Yerleşik sayısal veya boolean tür yoktur; her şey metindir. XSD gibi şemalar, doğrulama zamanında türleri zorunlu kılabilir; ancak iletim formatı her zaman karakter verisidir. YAML, JSON ile aynı nesne ve dizi modelini girintileme kullanarak ifade eder; söz dizimi daha okunabilirdir. YAML, JSON'ın bir üst kümesidir: geçerli her JSON belgesi aynı zamanda geçerli bir YAML belgesidir. Çok satırlı dizeler, yorumlar ve tekrar eden bloklar için bağlantı-takma ad referansları ekler. YAML yapılandırma dosyalarında yaygın; JSON ise API yanıtlarında yaygındır.

Dört veri modelini yan yana gösteren diyagram: CSV düz tablo olarak, JSON türlendirilmiş değerlerle iç içe nesne ağacı olarak, XML niteliklerle öğe ağacı olarak ve YAML girintili blok yapısı olarak

Kayıplı Dönüştürmeler: Düzleştirme ve XML Belirsizliği

En yaygın kayıplı dönüştürme, iç içe geçmiş JSON veya XML'in CSV'ye düzleştirilmesidir. İç içe geçmiş bir adres alanı içeren bir JSON nesnesi, bir CSV satırına düzgün biçimde eşlenemez. Tipik geçici çözüm, nokta gösterimli sütun adlarıdır: customer.address.city kendi sütunu olur. Bu, bir düzey iç içe geçme için işe yarar; ancak bir dizi göründüğünde tamamen çöker. Üç telefon numarasına sahip bir müşteri, ya üç ayrı sütun (maksimum sayıyı sabit kodlama), ikinci bir CSV dosyasına bölme ya da diziyi tek bir hücre içinde sınırlı bir diziye kodlama gerektirir. Bu seçeneklerin hiçbiri, fazladan meta veri olmadan orijinal JSON'a geri dönüştürülemez. XML, ayrı bir belirsizlik getirir: nitelik mi yoksa alt öğe mi seçimi. Paris değeri bir nitelik olarak (<city name="Paris">) veya alt öğe olarak (<city><name>Paris</name></city>) saklanabilir. Bir dönüştürücü XML okuyup JSON ürettiğinde, niteliklerin nasıl eşleneceğine karar vermesi gerekir. Yaygın kurallar, nitelik anahtarlarını @ ile öneklemeyi veya onları "_attributes" anahtarı altında yerleştirmeyi içerir. Seçim standartlaştırılmamıştır; bu da iki farklı dönüştürücünün aynı XML'i okuyarak yapısal olarak farklı JSON üretebileceği anlamına gelir. Veriyi XML ve JSON üzerinden gidip gelecek şekilde işlemeyi planlıyorsanız, başlamadan önce bir kural belirleyin.

CSV Tuzakları: Ayırıcılar, Tırnak İşaretleri ve Kodlama

CSV'nin tek bir resmi standardı yoktur; yaygın olarak başvurulan RFC 4180 referans niteliğindedir. En yaygın ayırıcı virgüldür; ancak noktalı virgüller (virgülün ondalık ayırıcı olarak kullanıldığı Avrupa yerel ayarlarında yaygın), sekmeler (TSV) ve kanallar da uygulamada görülür. .csv uzantılı bir dosya bunlardan herhangi birini kullanabilir. Bir alan değeri ayırıcıyı içerdiğinde, RFC 4180 alanın çift tırnak içine alınmasını gerektirir: "San Francisco, CA". Tırnak içindeki bir çift tırnak işareti, onu iki katına çıkararak kaçırılmalıdır: "He said ""hello""". Gerçek satır sonu içeren bir alan da tırnak içine alınmalıdır. Bu adımı atlayan ayrıştırıcılar, izlemesi güç satır sayısı hatalarına yol açar. Kodlama ayrı bir tuzaktır. Windows araçlarından gelen CSV dosyaları genellikle UTF-8 BOM (bayt sırası işareti: dosyanın başındaki EF BB BF üç baytı) taşır. BOM, Excel'in kodlamayı tanımasına yardımcı olur; ancak birçok programlama dili ayrıştırıcısı BOM'u ilk sütun adının bir parçası olarak ele alır ve "id" yerine "id" adlı bir sütun üretir. Bu, sütunlara ada göre bakan akış kodlarını bozar. Bir CSV dosyasını programatik olarak okurken, ayrıştırmadan önce BOM'u kaldırın ya da bunu açıkça ele alan bir kitaplık kullanın.

CSV tırnak işareti kurallarının gösterimi: virgül içeren bir alan çift tırnak içine alınmış, çift tırnak içeren bir alan kaçış karakteriyle iki katına çıkarılmış ve dosyanın başındaki UTF-8 BOM bayt dizisi hex görünümünde vurgulanmış

Format Seçimi: Yapılandırma, Veri Değişimi ve Elektronik Tablolar

Format seçimi genellikle tercihle değil, bağlamla belirlenir. JSON, REST API'leri ve tarayıcıdan sunucuya veri alışverişi için varsayılandır. Kompakt, her programlama dilinde yerel olarak ayrıştırılabilir ve sayılar ile boolean değerler için tür bilgisi taşır. Zayıf yönü ise yorum desteğinin olmamasıdır; bu da geliştiricilerin elle okuyup düzenlediği dosyalar için uygunsuz hale getirir. YAML, yapılandırma dosyaları için tercih edilir (Kubernetes manifestoları, CI akış tanımları, Ansible playbook'ları); çünkü satır içi yorumlara izin verir ve çok düzeyli girintili JSON'a kıyasla okunması daha kolaydır. Temel riski, girintileme hatalarının sessiz olmasıdır: yanlış girintilenen bir anahtar, herhangi bir ayrıştırma hatası vermeden farklı bir kapsama taşınır. XML, eski kurumsal sistemlerde, SOAP web hizmetlerinde, belge formatlarında (DOCX, SVG, RSS) ve şema doğrulaması veya ad alanı ayrımı gerektiren bağlamlarda standart olmaya devam etmektedir. Ayrıntılıdır; ancak XPath ve XSLT araçları olgunlaşmıştır. CSV, veri gerçekten düz olduğunda ve tüketicinin bir elektronik tablo uygulaması veya veri analisti olduğu durumlarda doğru seçimdir. Tür sistemi ve iç içe geçme desteği olmadığından yapılandırma veya API alışverişi için uygun değildir.

data-converter ile Yerel Olarak Dönüştürme

Bu sitedeki data-converter aracı, CSV, JSON ve YAML arasında tamamen tarayıcı içinde ayrıştırma ve dönüştürme yapar; XML okumaz veya yazmaz. Hiçbir veri hiçbir noktada bir sunucuya iletilmez. Dönüştürme, yerel JavaScript çalışma zamanınızda gerçekleşir; çıktı, cihazınızdan ayrılmadan indirilebilir veya kopyalanabilir. Bu durum, paylaşım iznine sahip olmadığınız veriler için önemlidir: kişisel bilgiler içeren API yanıtları, iç ana bilgisayar adları içeren yapılandırma dosyaları veya iç veritabanlarından CSV dışa aktarımları. Bu tür verileri sunucuda çalışan web tabanlı bir dönüştürücüye yapıştırmak, içeriğin ağ üzerinden iletilmesi ve sizin kontrolünüzde olmayan donanımda işlenmesi anlamına gelir. data-converter ile tarayıcı sekmesi işleme ortamıdır. Araç, CSV okurken veya yazarken RFC 4180 tırnak işareti kurallarını uygular ve CSV'ye giden JSON veya YAML için düz bir nesne dizisi bekler: bir anahtarın altındaki iç içe geçmiş bir nesne veya dizi değeri otomatik olarak nokta gösterimiyle düzleştirilmez; ayrı sütunlar olarak istiyorsanız bu alanları dönüştürmeden önce kendiniz düzleştirin. Veriyi XML'e veya XML'den taşımanız gerekiyorsa, önce özel bir XML aracıyla JSON veya YAML'a dönüştürün, ardından sonucu buraya getirin.

Bu makaledeki araçlar

Sıkça sorulan sorular

JSON'ı CSV üzerinden dönüştürüp orijinalini geri alabilir miyim?

Yalnızca JSON, iç içe geçmiş alan ve dizi değeri içermeyen düz bir nesne dizisiyse. İç içe geçmiş bir nesne veya dizi değeriniz olduğu anda, CSV temsili otomatik olarak geri alınamayan bir yapısal karar gerektirir (nokta gösterimli sütunlar, birden fazla satır veya kodlanmış dizeler). Verilerinizin iç içe geçmesi varsa, JSON, XML veya YAML gidip gelir; CSV gelmez.

Avrupalı bir uygulamadan dışa aktardıktan sonra CSV'm Excel'de neden yanlış görünüyor?

Avrupa yerel ayarları, virgüller ondalık gösterim için ayrıldığından genellikle CSV ayırıcısı olarak noktalı virgül kullanır. Avrupalı yerel ayarlardaki Excel, noktalı virgül bekler. Dosya virgül kullanıyorsa, Excel tüm satırı tek sütun olarak değerlendirir. Düzeltme yolu ya dışa aktarma ayarlarında ayırıcıyı değiştirmek ya da ayırıcıyı manuel olarak belirlemenize olanak tanıyan Excel'in Veri İçe Aktarma sihirbazını kullanmaktır. UTF-8 BOM sorunu ayrıdır: BOM olmadan Excel, vurgulu karakterleri de bozuk metin olarak okuyabilir.

YAML ile JSON arasındaki pratik fark nedir?

İkisi de aynı temel veri modelini temsil eder: nesneler, diziler, dizeler, sayılar, boolean değerler ve null. YAML, yorumlar (# ile başlayan satırlar), çok satırlı dize değişmezleri ve tekrar eden bloklar için bağlantı referansları ekler. JSON, geçerli YAML'ın kesinlikle bir alt kümesidir; ancak JSON ayrıştırıcıları YAML okumaz. Pratik kural: API yükleri ve veri depolama için JSON kullanın; insanların düzenlediği ve satır içi yorumlardan yararlanacağı yapılandırma dosyaları için YAML kullanın.