CSV ve JSON Farkı: Yapı, Veri Tipleri, Excel Ayracı ve Dönüştürme

Aynı müşteri listesi CSV'de 58, JSON'da 119 bayt tutabilir; ama asıl fark boyutta değil, yapıda. İki formatın tip, iç içe veri, Excel ayracı ve tırnaklama kurallarındaki farklarını ve sorunsuz dönüştürmeyi örneklerle anlatıyoruz.

7 dk okuma ToolsBasic
CSV ve JSON Farkı: Yapı, Veri Tipleri, Excel Ayracı ve Dönüştürme

CSV ve JSON, veriyi düz metin olarak saklayan iki formattır ama farklı şekiller için tasarlanmıştır. CSV (Comma-Separated Values, virgülle ayrılmış değerler) düz bir tablodur: her satır bir kayıt, her sütun bir alandır ve ilk satır çoğunlukla başlıktır. JSON ise ağaç yapısındadır: nesneler ve diziler iç içe geçebilir, değerlerin metin, sayı, mantıksal değer ya da null olarak bir tipi vardır. Kısacası e-tabloya ve toplu veri aktarımına CSV, API'lere ve iç içe veriye JSON daha uygundur.

İki yönde de dönüşüm gerektiğinde CSV'den JSON'a dönüştürücü ve JSON'dan CSV'ye dönüştürücü veriyi tarayıcınızdan çıkarmadan çevirir; girdiğiniz içerik sunucuya gönderilmez. Dönüşümden önce verinin geçerli olduğunu doğrulamak ve okunur hâle getirmek için JSON düzenleyici, iki dışa aktarımı satır satır karşılaştırmak için de metin fark kontrolü işe yarar.

CSV ve JSON yan yana

Aynı üç kaydı iki biçimde yazalım. Tablo hâli:

id,ad,sehir
1,Ayşe,İzmir
2,Mehmet,Ankara
3,Zeynep,Bursa

Ağaç hâli:

[{"id":1,"ad":"Ayşe","sehir":"İzmir"},{"id":2,"ad":"Mehmet","sehir":"Ankara"},{"id":3,"ad":"Zeynep","sehir":"Bursa"}]

İlki 58, ikincisi boşluksuz yazıldığında 119 bayttır; 2 boşluk girintiyle biçimlendirildiğinde 192 bayta çıkar. Fark, alan adlarının her kayıtta tekrar edilmesinden, tırnaklardan ve parantezlerden gelir. Buna karşılık JSON'daki 1 bir sayıdır; tablodaki 1 ise yalnızca bir karakterdir ve onu sayı yapan, dosyayı okuyan programdır.

ÖzellikCSVJSON
YapıDüz tablo: satır ve sütunAğaç: nesne, dizi, iç içe yapı
Veri tipleriYok, her hücre metindirMetin, sayı, true/false, null, nesne, dizi
StandartRFC 4180 (bilgilendirici belge, 2005)RFC 8259 ve ECMA-404
AyraçVirgül; pratikte noktalı virgül, sekme ve dikey çizgi de görülürSöz dizimi sabittir
Karakter kodlamasıBelirtilmez, dosyadan dosyaya değişirSistemler arası alışverişte UTF-8 zorunludur
Yorum satırıYokYok
Excel ile açmaDoğrudan, ama yerel ayara bağlıPower Query ile içe aktarma gerekir
Satır satır işlemeKolay (alan içi satır sonu hariç)Tek belge; akış için JSON Lines kullanılır

Veri tipleri: CSV'de her şey metindir

JSON altı tip tanır: metin, sayı, true/false, null, nesne ve dizi. CSV hiçbir tip tanımaz. Bir hücrenin sayı mı, tarih mi, kod mu olduğuna dosyayı açan program karar verir ve bu tahmin sık sık yanlıştır. Excel'de en çok karşılaşılan sorunlar şunlardır:

  • Baştaki sıfırların kaybolması. 06100 posta kodu 6100, 05321234567 telefon numarası 5321234567 olur.
  • Uzun sayıların bozulması. Excel sayıları 15 anlamlı basamakla saklar; 16 haneli bir kart numarasının son hanesi sıfıra döner, uzun sayılar 1,23E+15 gibi bilimsel gösterime geçer.
  • Tarihe dönüşen kodlar. 1-2 ya da 3/4 gibi değerler tarih sanılır. Biyolojide bazı gen adları bu yüzden yıllarca tarihe dönüştü ve 2020'de gen adlandırma kurallarında değişikliğe gidildi.
  • Ondalık ayraç karmaşası. Türkçe yerel ayarda 12,50 bir sayıdır; İngilizce ayarlı bir sistemde iki ayrı alan ya da metin olarak okunabilir.

Sitedeki CSV'den JSON'a dönüştürücü bu yüzden hiçbir değeri yorumlamaz: her hücre JSON'da metin olarak kalır. 007 değeri "007" olarak çıkar ve sıfırlar kaybolmaz. Sayıya ya da tarihe çevirmek gerekiyorsa bunu, alanın ne anlama geldiğini bilen kendi kodunuzda bilinçli olarak yapmak daha güvenlidir.

Excel, noktalı virgül ve Türkçe karakterler

"Dosyayı açtım, her şey tek sütunda" şikâyetinin sebebi neredeyse her zaman ayraçtır. Excel bir CSV dosyasını açarken işletim sisteminin bölgesel ayarlarındaki liste ayırıcısını kullanır. Türkçe ve İspanyolca gibi ondalık ayracı virgül olan yerel ayarlarda liste ayırıcısı noktalı virgüldür. Sonuç iki yönlüdür: virgülle ayrılmış bir dosya tek sütuna düşer, Türkçe Excel'in CSV olarak kaydettiği dosya ise aslında noktalı virgülle ayrılmıştır ve İngilizce ayarlı bir bilgisayarda bozuk görünür.

  1. Dosyayı çift tıklayarak açmak yerine Excel'de Veri sekmesindeki metin/CSV'den içe aktarma seçeneğini kullanın.
  2. Açılan pencerede dosya kaynağını 65001: Unicode (UTF-8) olarak seçin.
  3. Ayracı elle belirtin: virgül, noktalı virgül ya da sekme.
  4. Gerekirse dönüştürme ekranında kod, posta kodu ve telefon gibi sütunların tipini Metin yapın; baştaki sıfırlar böylece korunur.
  5. Önizlemede Türkçe karakterleri ve sütun sayısını kontrol edip yükleyin.

Karakter kodlaması ikinci büyük sorundur. UTF-8 olarak kaydedilmiş ama başında BOM (bayt sırası işareti) olmayan bir dosyayı Excel çoğu zaman eski Windows kodlamasıyla okur; "ş" harfi "ÅŸ", "ğ" harfi "ÄŸ" olarak görünür. Excel'de kaydederken "CSV UTF-8" seçeneğini kullanmak dosyanın başına BOM ekler ve sorunu çözer. Bazı kişiler dosyanın ilk satırına sep=; yazarak Excel'e ayracı söyler; bu yalnızca Excel'in anladığı standart dışı bir ipucudur ve diğer programlar bu satırı veri sanır.

Sitedeki dönüştürücü ayracı kendisi algılar: virgül, noktalı virgül, sekme ve dikey çizgi (|) desteklenir; Excel'den gelen noktalı virgüllü dosya için ayar yapmanız gerekmez. Ters yönde üretilen tablo ise virgülle ayrılır; onu Türkçe Excel'de açarken yukarıdaki içe aktarma adımlarını kullanın.

RFC 4180 tırnaklama kuralları

Tablo biçiminin en çok hata üreten tarafı, ayracın ya da satır sonunun verinin içinde geçmesidir. RFC 4180 bunun için basit kurallar koyar:

  • Ayraç, çift tırnak ya da satır sonu içeren bir alan çift tırnak içine alınır: "Kalem, mavi".
  • Tırnaklı alanın içindeki çift tırnak iki kez yazılarak kaçırılır: "İçinde ""tırnak"" var".
  • Tırnaklı bir alan birden fazla satıra yayılabilir; bu satır sonu kaydın bittiği anlamına gelmez.
  • Her satırda aynı sayıda alan bulunmalıdır. Kayıtlar CRLF ile ayrılır; son satırdan sonra satır sonu olması isteğe bağlıdır.

Noktalı virgüllü bir Türkçe dosyada bu kurallar şöyle görünür:

kod;ad;fiyat;not
007;"Kalem, mavi";12,50;"İçinde ""tırnak"" var"
014;Defter;45;

Dönüştürücü bu dosyanın ilk satırından şu kaydı üretir: {"kod": "007", "ad": "Kalem, mavi", "fiyat": "12,50", "not": "İçinde \"tırnak\" var"}. Kodun baştaki sıfırları ve fiyattaki virgül olduğu gibi kalır; ikinci kayıtta not alanı boş metin olarak gelir.

Sık görülen bozuk dosya örnekleri

  • Kapanmamış tırnak: tek bir eksik tırnak, dosyanın geri kalanını tek bir alana çevirir. Dönüştürücü bu durumda tırnaklı bir alanın kapanmadığını söyleyen bir hata verir.
  • Ters eğik çizgiyle kaçış: bazı programlar tırnağı \" diye yazar. Bu RFC 4180'e uygun değildir ve çoğu ayrıştırıcıda alanları kaydırır.
  • Değişen sütun sayısı: bir satırda fazladan ayraç varsa veriler bir sütun sağa kayar. Fazla hücreler dönüştürücüde column_5 gibi adlarla ayrı bir alana yazılır, böylece kayma gözden kaçmaz.
  • Tekrarlayan başlıklar: iki sütunun adı aynıysa JSON nesnesinde biri ötekini ezer. Dönüştürücü ikinciye _2 ekler: fiyat ve fiyat_2.

CSV ve JSON arasında dönüştürme

Tablodan JSON'a

  1. Tablo içeriğini dönüştürücüye yapıştırın; ayraç otomatik algılanır.
  2. İlk satırın başlık olduğundan emin olun; dönüştürücü ilk satırı alan adları olarak kullanır.
  3. Çıktıyı kontrol edin: her satır bir nesne, her değer bir metindir.
  4. Gerekirse sonucu JSON düzenleyicide doğrulayın, sayı ve tarih alanlarını kendi kodunuzda dönüştürün.

JSON'dan tabloya

Ters yönde asıl soru, iç içe veriyle ne yapılacağıdır. Dönüştürücü iç içe nesneleri noktalı sütun adlarına açar, dizileri ise JSON metni olarak tek hücreye yazar. Şu girdiyi ele alalım:

[{"id":1,"ad":"Ayşe","adres":{"il":"İzmir","ilce":"Bornova"},"etiketler":["vip","yeni"]},{"id":2,"ad":"Mehmet","adres":{"il":"Ankara"},"etiketler":[]}]

Çıktı şöyledir:

id,ad,adres.il,adres.ilce,etiketler
1,Ayşe,İzmir,Bornova,"[""vip"",""yeni""]"
2,Mehmet,Ankara,,[]

İkinci kayıtta ilçe olmadığı için hücre boş kalır; sütun kümesi tüm kayıtlardaki alanların birleşimidir. Dizi içeren hücre, içinde virgül ve tırnak geçtiği için RFC 4180 kurallarına göre tırnaklanmıştır. Her etiketin ayrı bir satır olmasını istiyorsanız, veriyi dönüştürmeden önce etiketleri ayrı bir tabloya ayırmanız gerekir; tek tabloda bunu yapmanın kayıpsız bir yolu yoktur.

Hangisini ne zaman seçmeli

  • CSV seçin: veri doğal olarak tablo şeklindeyse, e-tabloda açılacaksa, bir veritabanına toplu yüklenecekse ya da çok büyük ve satır satır işlenecekse.
  • JSON seçin: veri iç içeyse (sipariş ve kalemleri, kullanıcı ve adresleri), tiplerin korunması gerekiyorsa, bir API yanıtı ya da yapılandırma dosyasıysa.
  • JSON Lines düşünün: her satırda bağımsız bir nesne tutan bu biçim, JSON'un tiplerini tablonun satır satır işlenebilirliğiyle birleştirir; büyük log ve dışa aktarma dosyalarında yaygındır.
  • İkisini birlikte kullanın: iş birimleri için tablo, sistemler arası alışveriş için JSON çıkarmak çoğu projede en az sürtünmeli yoldur.

Sık sorulan sorular

CSV dosyası Excel'de neden tek sütunda açılıyor?

Excel'in beklediği ayraç ile dosyadaki ayraç farklıdır. Türkçe yerel ayarda Excel noktalı virgül bekler; virgülle ayrılmış dosya bu yüzden tek sütuna düşer. Metin/CSV'den içe aktarma ekranında ayracı elle seçmek sorunu çözer.

JSON dosyasını doğrudan Excel'de açabilir miyim?

Windows için Excel'in güncel sürümlerinde Veri sekmesindeki JSON'dan içe aktarma seçeneği (Power Query) bunu yapar, ama iç içe yapılar için ek adımlar gerekir. Düz bir kayıt listesini önce tabloya çevirmek çoğu zaman daha hızlıdır.

Sayıları ve tarihleri nasıl korurum?

Dosyanın kendisi tip taşımadığı için koruma, onu açan programda yapılır. İçe aktarırken ilgili sütunları Metin olarak işaretleyin ve tarihleri 2026-10-13 gibi ISO 8601 biçiminde yazın; bu biçim çoğu programda yerel ayardan bağımsız olarak doğru yorumlanır.

Hangisi daha az yer kaplar?

Düz tablolarda CSV, çünkü alan adlarını yalnızca bir kez yazar. Yukarıdaki örnekte aynı veri tablo olarak 58, boşluksuz JSON olarak 119 bayttı. Gzip gibi sıkıştırmalar tekrar eden alan adlarını iyi yakaladığı için ağ üzerindeki fark daha küçüktür.

JSON tarafını ayrıntılı ele aldığımız JSON dosyası biçimlendirme ve dönüştürme rehberi bu yazının devamı sayılır. Kayıtlarınıza benzersiz kimlik vermek için UUID nedir, dosyaların içine gömülü ikili veriyi anlamak için Base64 nedir yazılarına göz atabilirsiniz.

İlgili araçlar

Katalog

Blog Yazıları