Veri

CSV, JSON ve YAML

Dünyadaki yapılandırılmış verinin çoğunu üç format taşır. Aralarında dönüştürmek kolaydır; ancak sessizce bir şeyi bozmadan dönüştürmek biraz dikkat gerektirir.

Yayımlanma tarihi:

Her birinin ne için olduğu

CSV bir tablodur: satırlar ve sütunlar, başka bir şey değil. Evrensel olarak okunabilir, çok küçüktür ve iç içe geçmiş hiçbir şeyi ifade edemez. JSON bir ağaçtır — nesnelerin içindeki dizilerin içindeki nesneler — ve hemen hemen her web API'sinin konuştuğu dildir. YAML JSON ile aynı yapıları ifade eder ancak süslü parantez yerine girinti kullanır; bu, insanlar için okumayı ve düzenlemeyi çok daha keyifli kılar ve yapılandırma dosyalarının ona yönelmesinin nedeni budur.

Tür dönüştürme tuzağı

İnsanlara gerçekten para kaybettiren budur. Bir CSV yalnızca metin içerir — bir değeri sayı, tarih veya dize olarak işaretlemenin yolu yoktur. Bu yüzden dönüştürücüler tahmin yürütür ve tahminler çoğu zaman yanlıştır:

  • 01234 gibi bir posta kodu 1234 sayısına dönüşür ve baştaki sıfırı kaybeder.
  • 1-2 gibi bir ürün kodu tarihe dönüşür.
  • Uzun bir hesap numarası kayan noktaya dönüşür ve son rakamlarını kaybeder.
  • Kuzey Amerika anlamına gelen NA, “mevcut değil” olur.

Bunların her biri sessizce gerçekleşir. Bu yüzden dikkatli bir CSV'den JSON'a dönüştürme her değeri dize olarak bırakmalı ve karar vermeyi size bırakmalıdır — bu sitenin dönüştürücüsü ilk bakışta titiz görünse de bunu bilerek yapar.

CSV yolculuğunda neler korunamaz

İç içe geçme. Düz nesnelerden oluşan bir JSON dizisi temiz bir tabloya dönüşür. Bir değer kendisi bir nesne veya dizi olduğu anda, onu koyacak bir sütun yoktur. Seçenekler; birleşik anahtarlarla düzleştirmek, iç içe parçayı hücresinin içinde yeniden metne serileştirmek veya atmaktır — ve sessizce atmak üçünün en kötüsüdür. Hücrenin içine JSON metni olarak geri yazmak, en azından veriyi kurtarılabilir tutar.

YAML'ın keskin kenarları

YAML okumak keyiflidir ve yanlış yapmak alışılmadık ölçüde kolaydır.

  • Girinti yapıdır ve sekmelere izin verilmez. Yanlış yerleştirilmiş bir boşluk hataya yol açmak yerine anlamı değiştirir.
  • Bazı çıplak sözcükler mantıksal değerlerdir. Eski YAML'da y, n, on, off, yes ve no doğru veya yanlış olarak ayrıştırılır — bu yüzden Norveç için NO içeren bir ülke sütunu false olur. Bunları tırnak içine alın.
  • JSON'a dönüştürürken yorumlar kaybolur, çünkü JSON onları temsil etmenin bir yolunu sunmaz.

Gidiş dönüş garanti değildir

JSON'u YAML'a ve geri dönüştürmek genellikle başladığınız şeyi geri verir. CSV'yi JSON'a ve geri dönüştürmek genellikle vermez: tırnak stili, farklı biçimlere sahip kayıtlar için sütun sırası ve boş değerlerin temsili birer tercihtir ve farklı araçlar farklı seçer. Bir gidiş dönüşün birebir olması gerekiyorsa varsaymayın, doğrulayın.

Aralarında geçiş yapmak için: CSV'yi JSON'a dönüştürün, JSON'u CSV'ye dönüştürün veya JSON'u YAML'a dönüştürün — ve sonucu denetleyin, çünkü gidiş dönüş her zaman birebir değildir.