CSV’den JSON’a Dönüştürme: Yapısal Farklar, Pratik Sınırlamalar ve Doğru Kullanım
CSV dosyası (virgül, noktalı virgül veya sekme ile ayrılmış metin) ile JSON arasındaki dönüşüm, göründüğü kadar basit bir metin işleme değildir. Elinizde bir CSV satış raporu, ürün listesi ya da adres defteri varken bunu bir JavaScript uygulamasına veya API’ye beslemek istediğinizde karşılaştığınız temel sorun şudur: CSV her şeyi düz metin olarak saklar; JSON ise sayı, boolean, null ve iç içe yapıları destekler. Bu sayfada anlatılan dönüştürücü, tam da bu uçurumu kapatmak için tasarlanmıştır. Ancak sonucun beklendiği gibi çalışması, CSV’nin doğasındaki bazı kuralları ve aracın getirdiği sınırlamaları anlamayı gerektirir.
CSV’nin Yapısal Tuhaflıkları: Ayraç, Tırnak ve Satır Sonu
CSV, adındaki “virgül”e rağmen aslında üç farklı ayraçla karşımıza çıkar: virgül (,), noktalı virgül (;) ve sekme (\t). Hangi ayracın kullanıldığı, dosyayı üreten programın yerel ayarlarına bağlıdır (örneğin, Türkiye’de Excel bazen noktalı virgülü tercih eder). Dönüştürücü, dosyayı yükledikten sonra size bu üç seçeneği sunar. Yanlış ayraç seçimi, sütunların birbirine karışmasına, hatta dosyanın hiç ayrıştırılamamasına yol açar.
Daha da kritik olan, CSV’nin tırnak (çift tırnak, ") kullanarak alan içindeki virgül ve satır sonlarını koruma mekanizmasıdır. Standartlara göre, içinde virgül veya satır sonu bulunan bir değer çift tırnak içine alınır ("İstanbul, Türkiye"). Eğer dosyayı oluşturan kişi bu kurala uymamışsa (ki sıkça rastlanır), dönüştürücü şu hatayı verir: "This CSV could not be parsed." Aynı şekilde, tırnak içinde başka bir tırnak ("" şeklinde kaçış) doğru yapılmadığında da hata alırsınız. CSV’deki satır sonları tırnak içinde korunuyorsa, dönüştürücü bunu \n (yeni satır karakteri) olarak JSON string değerine aktarır. Ancak tırnak dışında kalan satır sonları satır sonu olarak yorumlanır ve hatalı sütun sayılarına neden olur.
Dönüştürücü, dosyayı yükledikten sonra otomatik olarak giriş biçimini (CSV, JSON veya XLSX) algılar. Sayfanın birincil senaryosu CSV → JSON olsa da, yanlışlıkla JSON veya Excel dosyası yükleyen kullanıcı için de bir tablo oluşturup dönüştürme yapabilir. Ancak bu durumda aşağıdaki kısıtlamalar geçerlidir.
Flat Tablodan Flat JSON’a: İç İçe Yapı Yok
CSV, hücrelerin yan yana dizildiği düz (flat) bir tablodur. Bu nedenle dönüştürücü, çıktı olarak her satırın bir nesne olduğu, her sütunun da bir anahtar (key) olduğu düz bir JSON dizisi (array of objects) üretir. Hiçbir şekilde iç içe JSON yapıları (örneğin, bir adres alanının içinde şehir, ilçe, sokak gibi alt nesneler) oluşmaz. Bunun için ekstra kurallar veya dönüştürme sonrası elle düzenleme gerekir. Tersi yönde çalışan araçlar (JSON → CSV) ise iç içe nesneleri düzleştirmek zorunda oldukları için daha karmaşıktır.
Aşağıdaki tablo, bir CSV’nin nasıl JSON’a dönüştüğünü gösterir:
| CSV satırı | JSON karşılığı |
|---|---|
isim,soyisim,yas (başlık) |
dizideki her nesnenin anahtarları: {"isim": "...", "soyisim": "...", "yas": "..."} |
Ali,Yılmaz,34 |
{"isim": "Ali", "soyisim": "Yılmaz", "yas": "34"} |
Ayşe,Kara,28 |
{"isim": "Ayşe", "soyisim": "Kara", "yas": "28"} |
Dikkat: yas alanı CSV’de 34 olarak görünür, ancak JSON çıktısında "34" (string) olur. Bunun nedeni, CSV’nin her alanının düz metin olmasıdır. Dönüştürücü, sayıları, boolean’ları veya null değerlerini otomatik olarak algılamaz. Bu, aşağıda detaylandırılacak bir diğer önemli farktır.
Tür Sistemi: Metin Olarak Gelen Her Şey Metin Olarak Kalır
JSON, 42, true, null gibi gerçek veri türlerini desteklerken CSV’de tüm hücreler karakter dizisidir. Dönüştürücü, bu farkı kapatmak için hiçbir otomatik tip dönüşümü yapmaz. Yani CSV’deki "42" JSON’da "42" olarak kalır, 42 (sayı) olmaz. Bu bilinçli bir tercihtir: Dönüştürücü, yanlışlıkla bir posta kodu ya da ürün kodu gibi başında sıfır bulunan değerlerin ("00123") sayıya dönüşüp sıfırını kaybetmesini (123) engeller.
Bu durumun iki pratik sonucu vardır:
- Sayısal işlem yapacaksanız – örneğin JSON’u bir veritabanına veya analiz aracına yükleyecekseniz – CSV’den gelen string değerleri, dönüşüm sonrası manuel olarak sayıya çevirmeniz gerekir. Dönüştürücü bunu sizin yerinize yapmaz.
- Tarihler – CSV’de
2024-01-15metni, JSON’da"2024-01-15"olur. JSON’un yerleşik bir tarih türü yoktur; bu nedenle tarih formatını korumak için string olarak bırakılması doğrudur. Ancak uygulamanız tarihiDatenesnesine dönüştürecekse, çıktıyı işlerken bunu yapmanız gerekir.
Başta sıfırların korunması en kritik noktadır. Örneğin bir posta kodu dosyasında "06420" değeri vardır. Dönüştürücü, bunu "06420" olarak JSON’a yazar. JSON’u yorumlayan herhangi bir araç (örneğin JavaScript’te JSON.parse()) bu değeri string olarak bırakır. Ancak eğer siz JSON’u yüklerken otomatik tür çıkarımı yapan bir kütüphane kullanıyorsanız (bazı Python kütüphaneleri gibi), sıfırları kaybedebilirsiniz. Aracın kendisi bu soruna neden olmaz.
Hata Durumları ve Sınırlar
Dönüştürücü, çeşitli hata ve uyarı durumlarında aşağıdaki tam metin mesajlarını gösterir. Bu mesajlar, sorunun kaynağını anlamak için kritiktir.
| Durum | Kullanıcıya Gösterilen Mesaj |
|---|---|
| CSV ayrıştırılamaz (tırnak hatası, tutarsız sütun sayısı vb.) | "This CSV could not be parsed." |
| Dosyada hiç veri satırı yok (sadece başlık veya boş) | "This file has no table rows." |
| Satır sayısı aracın izin verdiği maksimumdan fazla | "This table has more than ‹max› rows." |
| Sütun sayısı aracın izin verdiği maksimumdan fazla | "This table has more than ‹max› columns." |
| Dosya boyutu sınırı aşıldı | "This file is too large. Use a file under ‹max›." |
| Kullanıcı hiç dosya seçmemiş | "Choose one file first." |
| Yanlış dosya türü yüklenmiş (CSV, JSON veya XLSX dışında) | "Choose a CSV, JSON or XLSX file." |
| Dönüşüm çok uzun sürdü (büyük dosyalarda) | "This conversion is taking too long. Try a smaller file." |
Belirtilen ‹max› değerleri, aracın teknik sınırlamalarıdır ve sayfada belirtilen koşullara göre değişir. Dosya boyutu sınırını aşan kullanıcılar, dosyayı bölerek veya satır sayısını azaltarak işlemi tekrar denemelidir.
Gizlilik Avantajı: İstemci Tarafında İşleme
Dönüştürme işlemi tamamen tarayıcı içinde (istemci tarafında) gerçekleşir. Dosyanız herhangi bir sunucuya yüklenmez. Bu, özellikle müşteri listeleri, finansal veriler veya kişisel bilgiler içeren CSV dosyalarını dönüştüren kullanıcılar için önemlidir. Hiçbir veri üçüncü taraf bir sunucuda saklanmaz veya işlenmez. Tek gereken, dosyayı kendi bilgisayarınızdan seçmek ve sonucu indirmektir.
Bu yaklaşım, veri güvenliği endişesi olan şirketler ve araştırmacılar için idealdir. Dönüştürücü, dosyayı okumak, ayrıştırmak ve JSON’a çevirmek için yalnızca tarayıcının JavaScript motorunu kullanır. İnternet bağlantısı kesik olsa bile (sayfa önceden yüklendiyse) dönüşüm çalışabilir. Ancak dosya boyutu çok büyükse veya tarayıcının bellek sınırına yaklaşılıyorsa, performans düşebilir ve yukarıdaki “çok uzun sürüyor” uyarısı gösterilebilir.
Gerçek Hayattan Senaryolar ve Yanılgılar
Dönüştürücüyü kullanacak kişiler genellikle üç profilde toplanır:
- Geliştirici: Veritabanından CSV dışa aktarımı alır ve bunu bir REST API’ye beslemek için JSON’a çevirir. Burada en büyük hata, sayıların metin olarak kalmasını unutup uygulamada tip dönüşümü yapmamaktır.
- Veri analisti: Başında sıfır bulunan posta kodları veya ürün kodları içeren bir CSV’yi JSON’a çevirir ve sıfırların korunduğunu görür. Ancak JSON’u başka bir araca yüklerken, o aracın otomatik tip çıkarımını devre dışı bırakmayı unutursa sıfırlar kaybolur. Dönüştürücü bu konuda uyarı vermez, sorumluluk kullanıcıya aittir.
- Ekip paylaşımı yapan kişi: Excel kullanan bir ekip arkadaşı CSV olarak gönderdiği veriyi, teknik ekipte JSON bekleyen bir uygulamaya aktarır. Dönüştürücü, hassas verilerin sunucuya gitmemesi sayesinde bu paylaşımı güvenli kılar.
Yaygın bir yanılgı, CSV’nin sütun türlerini içerdiği sanrısıdır. Oysa CSV’nin yapısı yalnızca metin ve ayraçlardan ibarettir. Dönüştürücü, bu gerçeği koruyarak herhangi bir “akıllı” tahminde bulunmaz. Bu, bazı kullanıcılar için sürpriz olsa da, veri bütünlüğü açısından doğru olan yaklaşımdır.
Sıkça Sorulan Sorular (FAQ)
1. CSV’de sayı varsa, JSON’da otomatik olarak sayıya çevrilecek mi?
Hayır. Tüm CSV alanları string olarak kalır. "42" değeri JSON’da "42" olur. Sayıya çevirmek için dönüşüm sonrası JSON’u işleyen kodunuza bir tip dönüşümü eklemelisiniz.
2. Posta kodum “00123” gibi başında sıfır var. JSON çıktısını alınca sıfır kaybolur mu?
Hayır. Sıfırlar korunur çünkü değer string olarak işlenir. JSON’u yükleyen araç sizin kontrolünüzde değilse, o araçta sıfırları korumak için ek önlem almanız gerekebilir.
3. CSV dosyamda tırnak içinde virgül var (örneğin “İstanbul, Türkiye”). Dönüşüm başarısız oluyor, ne yapmalıyım?
Dosyanızın doğru biçimlendirilmiş tırnak kullanımına sahip olduğundan emin olun. Eğer hâlâ hata alıyorsanız, muhtemelen tırnak kaçışları yanlıştır. Dosyayı Excel veya Google E-Tablolar gibi bir araçtan yeniden “CSV (virgülle ayrılmış)” olarak dışa aktarmak sorunu çözebilir.
4. Dönüşümü yaparken dosyamı sunucuya gönderiyor musunuz?
Hayır. Tüm işlem tarayıcınızda, yani kendi bilgisayarınızda gerçekleşir. Dosya hiçbir sunucuya yüklenmez.
5. CSV dosyamda 100.000 satır var. Dönüşüm uzun sürüyor, ne yapmalıyım?
Dönüştürücü belirli bir satır ve sütun sınırına sahiptir. Eğer sınırı aşıyorsanız uyarı alırsınız. Dosyayı bölmek veya satır sayısını azaltmak işe yarayabilir. Çok büyük dosyalar için “This conversion is taking too long. Try a smaller file.” hatasını alabilirsiniz.
6. JSON’dan CSV’ye dönüştürme de aynı araçla mı yapılıyor?
Bu sayfanın birincil senaryosu CSV → JSON’dur. Ancak araç, aynı zamanda JSON veya XLSX dosyalarını da okuyup size tablo önizlemesi sunar ve JSON çıktısı üretebilir. JSON’dan CSV’ye dönüşüm için ayrı bir sayfa (json-to-csv) bulunur. Burada anlatılan sayfa yalnızca CSV → JSON için optimize edilmiştir.