Bir tabloyu neden JSON'a çevirmeli
CSV, tablo programlarının, CRM'lerin, bankaların ve analiz panellerinin dışa aktardığı formattır. JSON ise web API'lerinin, JavaScript kodunun, NoSQL veritabanlarının ve çoğu yapılandırma sisteminin tükettiği formattır. Bu dönüşüme sürekli ihtiyaç duyulur: bir iş arkadaşınızın tuttuğu tablodan bir test veritabanını doldurmak, bir ürün listesini ön yüz prototipi için fixture'lara çevirmek, bir yönlendirme veya çeviri listesini bir derleme betiğine vermek ya da yalnızca JSON kabul eden bir API'ye toplu kayıt göndermek.
Buradaki çıktı, her veri satırı için bir nesne içeren bir JSON dizisidir. Başlık satırı özellik adlarını sağlar; böylece sku, title ve price sütunlarına sahip bir tablo, tam olarak bu üç anahtara sahip, döngüyle gezilmeye hazır nesnelere dönüşür.
Ayrıştırıcı CSV'nizi nasıl okur
CSV, bir değer ayırıcıyı içerene kadar basit görünür. Ayrıştırıcı, CSV'nin bir standarda en yakın karşılığı olan RFC 4180 kurallarını izler:
- Çift tırnak içine alınmış bir alan ayırıcıyı, satır sonlarını ve tırnakları içerebilir.
"Smith, John"tek bir değer olarak kalır. - Tırnaklı bir alanın içindeki tırnak iki kez yazılır:
"6"" pipe",6" pipeolur. - Satırlar Windows tarzı CRLF veya Unix tarzı LF ile bitebilir; ikisi de işlenir.
- Excel'in CSV UTF-8 olarak kaydederken başa eklediği bayt sırası işareti (BOM) kaldırılır, böylece ilk sütun adına yapışık kalmaz.
- Tamamen boş satırlar atlanır.
Ayırıcı, ilk satırdaki virgüller, noktalı virgüller, sekmeler ve dikey çizgiler sayılarak ve en sık olanı seçilerek belirlenir. Bu neredeyse her dışa aktarım için işe yarar, ancak başlığın temsil edici olmasına dayanır. Başlığınız ayırıcı içermeyen tek bir sütunsa virgül varsayılır.
Başlık adlarının etrafındaki boşluklar kırpılır, böylece price anahtarı price olur. Veri satırlarındaki değerler ise baştaki veya sondaki boşluklar dahil tam olarak yazıldığı gibi korunur.
Tipli değerler ve metinler
"Sayıları ve booleanları algıla" açıkken her hücre kısa bir kural listesine göre kontrol edilir:
42,-7ve19.99gibi düz tam sayılar ve ondalıklı sayılar, en fazla 15 haneye sahip oldukları sürece JSON sayılarına dönüşür.- Küçük harfle tam olarak
truevefalseboolean olur.TRUE,Yesveya1oldukları gibi kalır. - Boş bir hücre
nullolur. - Daha uzun rakam dizileri,
1.5e3,+5,.5,1,234ve tarihler dahil diğer her şey metin olarak kalır.
Bu, çoğu veri için kullanışlıdır, ancak JSON'daki sayılar biçimlendirme taşımaz; bu yüzden bazı değerler tipe çevrildiğinde anlam değiştirir:
- Baştaki sıfırlar kaybolur. ABD posta kodu
02134,2134olur;007ürün numarası ise7olur. - Uzun rakam dizileri hassasiyet kaybederdi. JavaScript sayıları yalnızca yaklaşık 15 anlamlı haneye kadar kesindir; bu yüzden 20 haneli bir sipariş kimliği veya kart numarası gibi daha fazla haneye sahip değerler yuvarlanmak yerine metin olarak tutulur.
- Artı işareti veya boşluk içermeyen telefon numaraları da sayıya dönüşür.
Herhangi bir sütun miktar değil tanımlayıcı içeriyorsa seçeneği kapatın ve gerçekten sayısal olan birkaç alanı kendi kodunuzda dönüştürün. Seçenek kapalıyken boş hücreler null yerine boş metin olur.
Çıktı yanlış göründüğünde
- Her şey tek bir anahtara düşüyor. Ayırıcı algılanamadı; genellikle başlık verilerden farklı bir ayırıcı kullandığı veya hiç ayırıcı içermediği için. İlk satırı kontrol edin.
- Değerler bir sütun kaymış. Bir alan ayırıcıyı içeriyor ama tırnak içinde değil. Elle düzenlemek yerine kaynak uygulamadan yeniden dışa aktarın; tablo programları bu tür alanları otomatik olarak tırnak içine alır.
- Fazla sütunlar kayboluyor. Anahtarlar yalnızca başlıktan gelir, bu yüzden son başlık sütununun ötesindeki hücreler atılır. Daha az hücreye sahip satırlarda eksik olanlar için
nullveya boş metin kullanılır. - İki sütun, tek anahtar. Başlıkta bir ad tekrarlanıyorsa, sonraki sütun her nesnede öncekinin üzerine yazar. Önce birini yeniden adlandırın.
- é gibi garip karakterler. Dosya eski bir kodlamayla kaydedilmiş. Onu yeniden CSV UTF-8 olarak kaydedin ve tekrar yapıştırın.
Sonuçla çalışmak
JSON 2 boşluk girintiyle yazdırılır; bu okumak ve bir depoya commit etmek için uygundur. Bir API isteği için küçültmek veya girintisini değiştirmek isterseniz onu JSON formatlayıcı aracından geçirin. Düzenledikten sonra ters yönde gitmek için JSON'u CSV'ye dönüştür diziden yeniden bir tablo oluşturur. Dönüşüm tamamen sayfa içinde çalışır; dışa aktarım müşteri adları, e-postalar veya maaşlar içerdiğinde bu önemlidir.