JSON’dan CSV’ye Dönüşüm: Hiyerarşik Veriyi Düzleştirme Yöntemleri ve Sınırlamalar
Bu araç, bir JSON dosyasını alıp CSV formatına dönüştürür. Kullanıcı dosyayı yükler veya sürükleyip bırakır, çıktı için bir ayraç (virgül, noktalı virgül veya sekme) seçer, tabloyu önizler ve dönüştürülmüş dosyayı indirir. Tüm işlemler tarayıcıda gerçekleşir; hiçbir veri herhangi bir sunucuya yüklenmez. Bu, özellikle gizlilik hassasiyeti olan iş akışlarında belirleyici bir farktır.
JSON'u CSV'ye çevirmek, Excel'den JSON'a veya CSV'den Excel'e yapılan dönüşümlerden farklıdır çünkü bu yön, hiyerarşik ve tipli bir veri biçimini düz, tipsiz bir tabloya düzleştirir. JSON nesneleri, dizileri, sayıları, boolean değerleri ve null'u iç içe yapılarda desteklerken CSV'nin türü, iç içe yapısı veya sayfaları yoktur. Dönüşüm, tüm tür bilgisini, iç içe yapıyı ve biçimlendirmeyi kaybeder. Bu makalede, bu farklılıkların nasıl yönetildiğini, hangi kuralların geçerli olduğunu ve kullanıcıların hangi hatalarla karşılaşabileceğini adım adım inceleyeceğiz.
JSON'dan CSV'ye Dönüşümün Temel Mantığı
Dönüşümün özü, JSON'un sahip olduğu yapısal esnekliği CSV'nin katı tablo şablonuna uydurmaktır. JSON bir anahtar-değer çifti biçimidir; değerler başka nesneler, diziler, dizeler, sayılar, boolean değerler veya null olabilir. CSV ise yalnızca satır ve sütunlardan oluşan, her hücresinde bir dize (metin) bulunan bir dosyadır.
Araç, yalnızca "tablo şeklinde" JSON dosyalarını kabul eder. Bu, iki durumdan birini ifade eder:
- Nesne Dizisi: JSON'un en üst seviyesinde bir dizi bulunur ve bu dizinin her elemanı bir nesnedir. Örneğin:
[ { "ad": "Ali", "yas": 30 }, { "ad": "Ayşe", "yas": 25 } ]geçerli bir tablo şeklindeki JSON'dur. Burada her nesne bir satıra, nesnelerin anahtarları (ad,yas) ise sütun başlıklarına dönüşür. - Dizi Dizisi: En üst seviye bir dizi ve bu dizinin her elemanı da bir dizidir. Örneğin:
[ ["Ali", 30], ["Ayşe", 25] ]geçerli bir diğer formdur. Bu durumda her iç dizi bir satır olur, sütun başlıkları otomatik olarak0,1,2… şeklinde atanır.
JSON'un bu iki yapıdan birine sahip olmaması veya geçersiz olması durumunda araç şu hatayı gösterir: "Bu JSON geçersiz veya tablo şeklinde değil." Kullanıcının dönüşüm yapmadan önce dosyasının bu tanıma uyup uymadığını kontrol etmesi gerekir.
İç İçe Nesneleri Düzleştirme: Nokta-Yol Notasyonu
JSON, birden çok seviyede iç içe nesneleri destekler. CSV'nin böyle bir yeteneği olmadığı için iç içe yapıların "düzleştirilmesi" gerekir. Araç, bunu nokta-yol notasyonu ile yapar.
Örneğin, şu JSON'u ele alalım:
[
{
"isim": "Ali",
"adres": {
"sehir": "İstanbul",
"ilce": "Kadıköy",
"postaKodu": "34710"
}
},
{
"isim": "Ayşe",
"adres": {
"sehir": "Ankara",
"ilce": "Çankaya",
"postaKodu": "06420"
}
}
]
Bu yapı düzleştirildiğinde, CSV'nin sütun başlıkları şöyle olur: isim, adres.sehir, adres.ilce, adres.postaKodu. adres nesnesinin içindeki her alan, üst nesnenin adı ile bir nokta ile birleştirilir. Bu notasyon, kullanıcının hangi alanın hangi iç içe yapıya ait olduğunu anlamasını sağlar.
Bu yöntemin bir sınırlaması vardır: Eğer JSON'da aynı isimde farklı seviyelerde anahtarlar varsa (örneğin, adres.il ve sehir.il gibi), nokta-yol notasyonu bu çakışmayı çözer. Ancak kullanıcı dönüşüm öncesinde bu tür çakışmaları fark etmeli ve gerekirse JSON'u yeniden yapılandırmalıdır.
Dizilerin İşlenmesi: Nesne Dizileri ve Değer Dizileri
JSON'da diziler iki farklı şekilde ortaya çıkar:
- Nesne Dizileri: Yukarıda da belirtildiği gibi, bir dizi içinde nesneler varsa, her nesne bir satır olur. Bu, en yaygın kullanım şeklidir ve araç doğrudan bu yapıyı tabloya dönüştürür.
- Değer Dizileri: Bir nesnenin değeri bir dizi olabilir. Örneğin, bir "etiketler" alanı
["a", "b", "c"]gibi bir dizi içerebilir. Bu durumda araç, diziyi bir satırda, sütun başlığı altında temsil eder. Ancak CSV tek bir hücrede yalnızca düz metin tutabileceğinden, dizi elemanları virgülle ayrılmış bir metin olarak yazılır. Bu yöntem, dizinin yapısını kaybeder; kullanıcı daha sonra bu metni ayrıştırmak zorunda kalır.
Alternatif bir yaklaşım, diziyi satırlara "patlatmak" (unpivot) olabilir, ancak bu araç böyle bir dönüşüm yapmaz. Diziyi olduğu gibi metin olarak saklar. Bu, özellikle bir sütunda birden çok değer bulunan durumlarda dikkat edilmesi gereken bir sınırlamadır.
Veri Türü Kaybı ve CSV'nin Tip Desteği Eksikliği
CSV, tür bilgisi taşımaz. Tüm hücreler metin (dize) olarak depolanır. JSON'dan CSV'ye dönüşüm yaparken bu, belirli kayıplara yol açar:
- Sayılar ve Boolean Değerler:
30sayısı"30"metnine dönüşür.truedeğeri"true"olur. Bu, çoğu durumda sorun yaratmaz çünkü Excel veya Google Sheets gibi araçlar bu metni tekrar sayıya çevirebilir. Ancak öndeki sıfırlar (leading zeros) kaybolur. Örneğin, bir JSON alanı"00123"(dize olarak) CSV'de00123olarak kalır, ancak123(sayı olarak)123olur ve öndeki sıfır olmaz. Daha da önemlisi, eğer JSON'da0123(dize) varsa ve kullanıcı bu değeri bir şifre veya kod olarak kullanıyorsa, dönüşüm sonrası bazı yazılımlar bu değeri123olarak yorumlayabilir. - null Değerler: JSON'daki
nulldeğerleri CSV'de boş hücrelere dönüşür. Bu genellikle istenen bir davranıştır. - Nesneler ve Diziler: Yukarıda açıklandığı gibi, iç içe nesneler düzleştirilir, diziler ise metin olarak saklanır. Yapısal bilginin tamamı kaybolur.
- Tarih ve Saat: JSON'da tarihler genellikle ISO 8601 formatında metin olarak saklanır (örneğin,
"2024-01-15T10:30:00Z"). Bu metin CSV'de aynen kalır, ancak artık bir tarih türü değil, yalnızca bir metin parçasıdır. Kullanıcı daha sonra bu metni tarihe dönüştürmek için ek işlem yapmalıdır.
Bu tür kayıplar, dönüşümün doğası gereğidir. Kullanıcının bu sınırlamaları bilmesi ve gerekirse JSON'da veri tiplerini dize olarak saklaması (örneğin, öndeki sıfırları korumak için) gerekir.
Ayraç Seçimi ve CSV Çıktısının Biçimlendirilmesi
CSV dosyasında sütunlar bir ayraç karakteri ile ayrılır. Araç üç seçenek sunar: virgül (,), noktalı virgül (;) ve sekme (\t).
- Virgül: En yaygın kullanılan ayraçtır. Ancak virgül, birçok Avrupa dilinde ondalık ayracı olarak kullanıldığı için (örneğin,
3,14), virgülle ayrılmış bir CSV'de ondalık sayılar sorun yaratabilir. Ayrıca metin içinde geçen virgüller (örneğin,"İstanbul, Türkiye") CSV'nin yapısını bozacağından, bu tür değerler tırnak içine alınmalıdır. Araç, bu kuralları otomatik olarak uygular. - Noktalı Virgül: Özellikle ondalık ayracı virgül olan dillerde (Türkiye, Almanya, Fransa gibi) tercih edilir. Excel'de bu ayraçla açılan dosyalar doğru şekilde algılanır.
- Sekme: Virgül ve noktalı virgülden farklı olarak, metin içinde sekme karakteri nadiren bulunur, bu nedenle tırnaklama ihtiyacını azaltır. Ancak bazı yazılımlar sekme ile ayrılmış dosyaları (TSV) farklı bir biçim olarak ele alabilir.
Araç, çıktıyı oluştururken RFC 4180 standardına uygun tırnaklama kurallarını uygular. Değer içinde ayraç karakteri, yeni satır veya tırnak işareti varsa, değer tırnak içine alınır ve değer içindeki tırnaklar (") iki tırnak ("") ile temsil edilir.
Hata Durumları ve Sınırlamalar: Dosya Boyutu, Satır ve Sütun Sayısı
Dönüşüm sırasında karşılaşılabilecek hatalar ve sınırlamalar şunlardır:
| Hata Mesajı | Açıklama |
|---|---|
| "Choose a CSV, JSON or XLSX file." | Desteklenmeyen bir dosya türü seçildiğinde. |
| "This file is too large. Use a file under ‹max›." | Dosya boyutu 8 MB'ı aştığında. |
| "This file has no table rows." | Dönüştürülen JSON'un satır sayısı sınırı aştığında. |
| "This file has no table rows." | Sütun sayısı sınırı aştığında. |
| "This JSON is invalid or not table-shaped." | JSON ayrıştırılamadığında veya desteklenen yapıda olmadığında (örneğin, en üst seviyede bir nesne varsa). |
| "This conversion is taking too long. Try a smaller file." | İşlem yaklaşık 12 saniyeyi aştığında. |
| "Could not convert this file." | Beklenmeyen bir hata durumu. |
| "Conversion cancelled." | Kullanıcı dönüşümü iptal ettiğinde. |
Tüm işlemler istemci tarafında (tarayıcıda) gerçekleştiği için, dosyanın işlenmesi tarayıcının belleği ve işlem gücüyle sınırlıdır. Dosya boyutu en fazla 8 MB olabilir. Ayrıca, en fazla 10.000 satır ve 200 sütun desteklenir.
Sık Sorulan Sorular (FAQ)
S: JSON dosyamı dönüştüremiyorum, "This JSON is invalid or not table-shaped." hatası alıyorum. Ne yapmalıyım?
C: Bu hata, JSON'unuzun ya geçersiz olduğu ya da tablo şeklinde olmadığı anlamına gelir. Önce JSON'unuzu bir doğrulayıcı ile kontrol edin. Ardından, en üst seviyede bir dizi olduğundan ve bu dizinin elemanlarının ya tümü nesne ya da tümü dizi olduğundan emin olun. Örneğin, { "kullanicilar": [...] } gibi bir yapı geçersizdir, çünkü en üst seviye bir nesnedir. Bu durumda JSON'u [...] olacak şekilde yeniden yapılandırmanız gerekir.
S: Dönüşüm sırasında sayılarımın başındaki sıfırlar kayboldu. Nasıl önleyebilirim?
C: CSV tür bilgisi taşımadığı için sayılar metne dönüşürken öndeki sıfırlar korunmaz. Bunu önlemek için, JSON'da bu değerleri sayı değil, dize olarak saklamalısınız. Örneğin, "00123" (tırnak içinde) olarak yazarsanız, CSV'de de 00123 olarak kalır. Ancak 123 (tırnaksız sayı) yazarsanız, 123 olur.
S: İç içe nesneler nokta-yol notasyonu ile düzleştiriliyor. Bu notasyonu değiştirebilir miyim? C: Hayır, araç varsayılan olarak nokta-yol notasyonunu kullanır ve kullanıcıya bu davranışı değiştirme seçeneği sunmaz. Eğer farklı bir notasyon istiyorsanız, dönüşüm öncesinde JSON'u yeniden yapılandırmalısınız.
S: Bu araç hangi dosya boyutunu destekliyor? C: Dosya boyutu sınırı 8 MB'tır. Daha büyük dosyalar "This file is too large. Use a file under ‹max›." hatasıyla reddedilir. Ayrıca, en fazla 10.000 satır ve 200 sütun desteklenir. Yaklaşık 12 saniyeden uzun süren dönüşümler "This conversion is taking too long. Try a smaller file." hatasıyla durdurulur.
S: Verilerim sunucuya yükleniyor mu? Gizlilik açısından güvenli mi? C: Hayır. Tüm dönüştürme işlemleri tamamen tarayıcınızda (istemci tarafında) gerçekleşir. Dosyanız hiçbir sunucuya yüklenmez, bu nedenle gizlilik açısından güvenlidir.
S: Dönüştürdüğüm CSV'yi Excel'de açtığımda bazı sütunlar birleşiyor veya tarihler bozuluyor. Neden?
C: CSV, yalnızca düz metin tutar. Excel veya benzeri programlar, CSV'yi açarken kendi tahminlerine göre veri türlerini atar (örneğin, 01/02/2023 gibi bir metni tarih olarak yorumlayabilir). Bu, Excel'in varsayılan davranışıdır ve CSV'nin bir sorunu değildir. Bunu önlemek için, CSV'yi Excel'de "Veri" sekmesinden "Metin İçe Aktar" sihirbazını kullanarak açabilir ve her sütunun türünü manuel olarak "Metin" olarak ayarlayabilirsiniz.