JSON'den Excel'e Dönüşümü: Hiyerarşik Veriyi Düz Tabloya Dönüştürme
JSON ve Excel (XLSX) iki farklı veri modeli kullanır. JSON, iç içe geçmiş nesneler ve dizilerle hiyerarşik bir yapı kurarken, Excel yalnızca düz satır ve sütunlardan oluşan bir tabloyu temsil edebilir. Bu nedenle bir JSON dosyasını Excel'e dönüştürmek, verinin otomatik olarak düzleştirilmesini (flattening) gerektirir. Sayfamız bu işlemi tek tıkla yapar: JSON'daki nesneler satırlara, anahtarlar sütun başlıklarına dönüşür; iç içe geçmiş alanlar ise nokta yolu (dot-path) ile yazılır. Örneğin address.city gibi bir sütun adı oluşur.
Aşağıdaki bölümlerde bu dönüşümün nasıl çalıştığını, hangi veri türlerinin korunduğunu, sınırlamaları ve olası hata durumlarını ayrıntılı olarak inceleyeceğiz.
Hiyerarşik JSON'un Düz Tabloya Dönüştürülmesi (Flattening)
JSON bir nesneler dizisi ([{...}, {...}]) veya diziler dizisi ([[...],[...]]) biçiminde olabilir. Dönüştürme aracı yalnızca "tablo şeklinde" JSON girdilerini kabul eder. Yani en üst düzeyde bir dizi olmalı ve bu dizi içindeki her öğe ya bir nesne ya da bir dizi olmalıdır.
Nesneler dizisi için kural: Her nesne bir satır olur. Nesnenin anahtarları sütun başlıklarına dönüşür. Eğer bir anahtarın değeri başka bir nesneyse (örneğin "address": {"city": "İstanbul", "zip": 34000}), bu iç içe yapı düzleştirilir ve sütun adı address.city, address.zip şeklinde oluşur. Aynı kural birden fazla düzey iç içe geçmiş nesneler için de geçerlidir: "company.address.street" gibi.
Diziler dizisi için kural: Eğer JSON doğrudan bir dizi içinde diziler barındırıyorsa ([["a", 1], ["b", 2]]), her iç dizi bir satır olarak tabloya eklenir. Dizi elemanlarının sırası sütun sırasını belirler; başlık olarak Column1, Column2 gibi otomatik adlar kullanılmaz.
Dizi içinde nesne bulunan durumlar: Eğer bir nesnenin değeri bir dizi ise (örneğin "tags": ["x","y"]), bu dizi olduğu gibi tek bir hücreye yazılamaz; çünkü Excel hücresi başka bir dizi içeremez. Bu durumda araç, diziyi virgülle ayrılmış bir metin olarak veya alt satırlar oluşturarak işlemez. Çıktı tablosunda her hücre yalnızca bir skaler değer (sayı, metin, boolean veya null) içerir.
Veri Türlerinin Korunması: JSON vs XLSX
CSV formatındaki bir dosyada tüm değerler metne dönüşür. Oysa XLSX, hücre düzeyinde veri türlerini saklayabilir: sayı, metin, boolean (DOĞRU/YANLIŞ), tarih. Bu araç JSON'daki sayıları ve boolean değerleri XLSX'in yerel türlerine dönüştürür. Örneğin:
"age": 30→ Excel hücresinde sayı 30"active": true→ Excel hücresindeDOĞRU(boolean)"name": "Ali"→ metin"score": null→ boş hücre
Yani CSV yerine XLSX kullanmanın en önemli avantajı veri türü korumasıdır. Ancak araç formül hesaplamaz, hücre biçimlendirmesi (renk, yazı tipi) yapmaz. Çıktı yalnızca düz veriden oluşan tek bir çalışma sayfasıdır.
Null değerler: JSON'da null olan alanlar Excel'de boş hücre olarak yazılır. Aynı şekilde bir anahtar hiç tanımlanmamışsa da o hücre boş kalır. Bu iki durum arasında görsel bir fark yoktur.
Tarayıcı Taraflı İşleme ve Gizlilik
Dönüştürme işlemi tamamen kullanıcının tarayıcısında gerçekleşir. Hiçbir dosya sunucuya yüklenmez. Bu veri gizliliği açısından kritik bir özelliktir: JSON içinde API anahtarları, kişisel bilgiler veya hassas yapılandırma verileri olsa bile bunlar sadece yerel bellekte işlenir. İnternet bağlantısı kesik olsa dahi araç çalışır (sayfa bir kere yüklendikten sonra). Çıktı dosyasını indirdiğinizde geçici işlem verileri tarayıcı önbelleğinden silinir.
Girdi ve Çıktı Kuralları (Edge Cases)
Araç, belirli koşulları kontrol ederek hatalı dönüşümleri engeller. Aşağıdaki tabloda geçerli girdi türleri ve karşılaşılabilecek durumlar özetlenmiştir.
| Durum | Davranış |
|---|---|
JSON bir dizi değilse (örneğin tek bir nesne {...}) |
"This JSON is invalid or not table-shaped." hatası |
| Dizi boşsa (``) | "This file has no table rows." hatası |
| Dosya boyutu belirtilen maksimumdan büyükse | "This file is too large. Use a file under 8 MB." hatası |
| Satır sayısı maksimum sınırı aşarsa | "This table has more than ‹max› rows." hatası |
| Sütun sayısı maksimum sınırı aşarsa | "This table has more than ‹max› columns." hatası |
| Kullanıcı dönüşümü iptal ederse | "Conversion cancelled." mesajı |
| İşlem çok uzun sürerse | "This conversion is taking too long. Try a smaller file." uyarısı |
Ayrıca "Choose a CSV, JSON or XLSX file." uyarısı, yanlış dosya türü seçildiğinde gösterilir. "Choose one file first." ise hiç dosya seçilmeden dönüştürme düğmesine tıklandığında belirir.
Önemli: Dosyada aynı anda yalnızca bir JSON işlenebilir. Birden fazla dosya seçmek mümkün değildir. Ayrıca girdi JSON'u başka bir Excel dosyasından dönüştürülmüş olsa bile, içindeki formüller veya biçimlendirmeler korunmaz. Kaynak JSON yalnızca düz veri içermelidir.
Hata Mesajları ve Sınırlamalar
Yukarıdaki tabloda listelenen hata mesajlarının her biri belirli bir geçersiz durumu işaret eder. En sık karşılaşılan sorun JSON'un "tablo şeklinde olmaması"dır. Bir JSON, en üstte bir dizi ile başlamalı ve bu dizi içindeki öğeler ya nesne ya da dizi olmalıdır. Örneğin:
// Geçerli - nesneler dizisi
[
{"isim": "Ali", "yas": 30},
{"isim": "Ayşe", "yas": 25}
]
// Geçerli - diziler dizisi
[["Ali", 30], ["Ayşe", 25]]
// Geçersiz - tek nesne
{"isim": "Ali"}
// Geçersiz - iç içe dizi object içinde
[{"veri":}]
Son örnekte veri anahtarı bir dizi içerdiği için, bu dizi düzleştirilemez; araç bu durumda da hata verir. Ayrıca JSON dosyasının geçerli bir JSON sözdizimine sahip olması gerekir (doğru tırnaklar, virgüller, küme parantezleri). Sözdizimi hatası varsa This JSON is invalid or not table-shaped. mesajı alınır.
Sınırlamalar: XLSX dosyası oluşturulurken herhangi bir hücre stili (renk, yazı tipi, kenarlık) uygulanmaz. Tüm hücreler varsayılan biçimde gelir. Yalnızca bir çalışma sayfası (Sheet1) bulunur. Ayrıca Excel'in bazı sütun adı sınırlamaları vardır: Sütun başlıkları çok uzunsa Excel'de kısaltılabilir, ancak bu araç bu kısıtlamayı denetlemez. Dot-path ile oluşan sütun adları doğrudan olduğu gibi yazılır. Dosya boyutu en fazla 8 MB olabilir. 10.000 satır ve 200 sütun sınırı vardır. Dönüşüm 12 saniyeden uzun sürerse "This conversion is taking too long. Try a smaller file." mesajıyla durdurulur.
Sıkça Sorulan Sorular
S: JSON dosyamda iç içe geçmiş nesneler var, hepsi düzleşiyor mu?
Evet, kaç düzey olursa olsun tüm iç içe nesne anahtarları nokta yoluyla (ör. kullanici.adres.il) sütun başlığı haline gelir. Ancak diziler düzleştirilmez; bir nesne içindeki dizi değeri hata nedeni olabilir.
S: Çıktı dosyasında birden fazla sayfa oluşturabilir miyim? Hayır. Araç yalnızca tek bir sayfa (Sheet1) içeren bir XLSX dosyası üretir.
S: Dönüşüm sırasında veri kaybı olur mu? Veri türleri (sayı, boolean, metin, null) korunur. Ancak JSON'daki dizi yapıları tek hücreye sığmayacağından, bu tür yapılar dönüştürülemez ve hata alırsınız. Ayrıca formül veya biçimlendirme gibi XLSX'e özgü özellikler elbette korunmaz çünkü kaynak dosyada yoktur.
S: Dosya boyutu sınırı nedir? Dosya boyutu en fazla 8 MB olabilir. Daha büyük dosyalar "Bu dosya çok büyük. ‹max› altında bir dosya kullanın." mesajıyla reddedilir.
S: JSON içinde tarih değerleri nasıl işlenir? JSON'da "2023-01-15" gibi bir metin tarih olarak yazılabilir. Araç bunu metin olarak XLSX'e yazar; Excel'de otomatik tarih tanıma olmaz. Eğer Excel'de tarih biçimi görmek istiyorsanız, dönüşüm sonrası hücreleri manuel olarak biçimlendirmeniz gerekir.
S: Dosyayı indirirken "Conversion cancelled" hatası alıyorum, ne yapmalıyım? Bu genellikle kullanıcının tarayıcı sekmesini kapatması veya başka bir işleme geçmesi durumunda oluşur. İşlemi yeniden başlatmayı deneyin. Eğer sürekli aynı hatayı alıyorsanız dosya boyutunu küçültmeyi veya daha basit bir JSON yapısı kullanmayı deneyin.