Ana Sayfa / Ücretsiz Araçlar / JSON to CSV
Veri & Yazılım Araçları

JSON to CSV & Tablo Dönüştürücü

API yanıtlarınızı ve JSON veri dizilerinizi Excel ve Google E-Tablolar uyumlu CSV formatına anında dönüştürün.

JSON Verinizi Yapıştırın
CSV / Tablo Çıktısı 0 satır
JSON girdisi bekleniyor...

JSON ve CSV Mimarisi: Hiyerarşik Veriden İlişkisel Tabloya Dönüşüm (RFC 8259 vs RFC 4180)

Yazılım geliştiriciler, veri mühendisleri ve sistem mimarları için modern web servislerinin (REST API, GraphQL), belge tabanlı veritabanlarının (MongoDB, CouchDB, Firestore) ve mikroservis iletişiminin de facto standardı JSON (JavaScript Object Notation - IETF RFC 8259) formatıdır. Buna karşılık veri analistleri, muhasebe departmanları, iş zekası (BI) araçları ve kurumsal tablo yazılımları (Microsoft Excel, Google Sheets, Apple Numbers) için en yaygın kabul gören veri değişim ortamı CSV (Comma-Separated Values - IETF RFC 4180) standardıdır.

JSON ile CSV arasındaki temel fark veri modelleme felsefesinde yatar: JSON, iç içe geçmiş nesneleri (nested objects) ve dizileri (arrays) barındıran hiyerarşik bir ağaç veya yönlü çizge (directed graph) yapısıdır. CSV ise yalnızca satırlardan (records) ve ayrıcı karakterlerle bölünmüş sütunlardan (fields) oluşan iki boyutlu düz bir matristir (flat relational table). Çok katmanlı bir JSON yapısını kayıpsız ve hatasız bir CSV tablosuna dönüştürmek, derinlemesine bir şema analizi ve düzleştirme (flattening) algoritması gerektirir.

Hiyerarşik Ağaçtan Düz Tabloya: Flattening (Düzleştirme) Mantığı
// Orijinal JSON Verisi (Hiyerarşik Ağaç):
{ "id": 101, "musteri": { "ad": "Ahmet", "sehir": "İstanbul" }, "siparisler": [ {"urun": "Laptop", "adet": 1} ] }
// Düzleştirilmiş CSV Satırı (Nokta Notasyonu & Düzleştirme):
id,musteri.ad,musteri.sehir,siparisler.0.urun,siparisler.0.adet
101,"Ahmet","İstanbul","Laptop",1

IETF RFC 4180 CSV Standardının Temel Sözdizimi Kuralları

CSV formatı basit gibi görünse de resmi IETF RFC 4180 spesifikasyonuna göre katı sözdizimi kurallarına tabidir:

  • Satır Sonu Standardı: Her kayıt (satır) resmi olarak CRLF (\r\n - ASCII Carriage Return + Line Feed) ile sonlanmalıdır; ancak modern Linux/macOS sistemler LF (\n) karakterini de destekler.
  • Hücre İçi Kaçış (Quoting & Escaping): Eğer bir hücrenin içeriğinde ayraç karakteri (virgül veya noktalı virgül), satır sonu (yeni satır) veya çift tırnak (") bulunuyorsa, hücrenin tamamı çift tırnak ("...") içine alınmak zorundadır.
  • Çift Tırnakların Kaçırılması: Hücre metninin kendi içinde yer alan çift tırnak karakterleri, yan yana iki adet çift tırnak ("") yazılarak kaçırılır. Örneğin 14" Ekran ifadesi CSV içerisinde "14"" Ekran" şeklinde kodlanır.
  • Sütun Başlığı Tutarlılığı: Tablonun ilk satırı sütun başlıklarını (headers) tanımlar. Takip eden tüm satırlar başlık sayısıyla tam olarak aynı adette sütun hücresi içermelidir; eksik hücreler ardışık virgüllerle (,,) boş geçilmelidir.

Karakter Kodlaması ve UTF-8 Byte Order Mark (BOM - \uFEFF) Zorunluluğu

Web dünyasında metinler UTF-8 kodlamasıyla iletilir. Ancak Microsoft Excel (özellikle Windows sürümleri), uzantısı .csv olan dosyaları çift tıklandığında UTF-8 olarak değil; işletim sisteminin yerel ANSI kod sayfasıyla (Türkiye için Windows-1254) açmaya çalışır. Bu durum Türkçe karakterlerin (ş, ğ, ı, ö, ç, İ) bozulmasına ve anlamsız gliflere (ü, ö, ç) dönüşmesine yol açar.

Bu kronik sorunu çözmek için CSV dosyasının en başına 3 baytlık UTF-8 Byte Order Mark (BOM - Onaltılık 0xEF 0xBB 0xBF / JavaScript \uFEFF) imzası eklenir. Bu imza Excel'e dosyanın UTF-8 olduğunu kesin olarak bildirir ve herhangi bir içe aktarma sihirbazına gerek kalmaksızın tüm Türkçe karakterlerin ve döviz sembollerinin (₺, €) hatasız açılmasını garanti eder.

Veri Değişim ve Tablo Formatları Karşılaştırma Matrisi

Modern veri mühendisliği, raporlama ve entegrasyon süreçlerinde yaygın olarak kullanılan veri formatlarının teknik yetenekleri ve mimari sınırları:

Format Standart / Spesifikasyon Şema & Hiyerarşi Dosya Boyutu & Sıkıştırma Tip Güvenliği (Typing) Excel & BI Uyumluluğu İdeal Kullanım Alanı
JSON RFC 8259 / ECMA-404 Çok Katmanlı Ağaç (Nested Tree) Orta (Anahtarlar her objede tekrarlanır) Güçlü (String, Num, Bool, Array, Object) Eklenti / PowerQuery gerekir REST API, NoSQL veritabanları, mikroservis haberleşmesi.
CSV IETF RFC 4180 2 Boyutlu Düz Tablo (Flat) Küçük (Başlıklar yalnızca 1 kez yazılır) Zayıf (Her hücre düz metindir) Doğrudan & Yerel (%100 Uyumlu) Veri analitiği, muhasebe aktarımı, veri ambarı (ETL) yüklemeleri.
TSV (Tab-Separated) IANA MIME text/tab-separated 2 Boyutlu Düz Tablo Küçük (Sekme karakteri ayracı) Zayıf (Düz metin) Yüksek (Metin içi virgüllerle çakışmaz) Doğal Dil İşleme (NLP), biyoinformatik, büyük sunucu logları.
Parquet Apache Parquet Spec Sütun Odaklı (Columnar Storage) Ultra Küçük (Snappy / Gzip sütun sıkıştırma) Çok Katı (Strict Types & Metadata) Python / SQL Motoru gerekir Büyük Veri (Big Data), Apache Spark, Snowflake, AWS Athena.
Excel (XLSX) ECMA-376 / ISO 29500 Çoklu Çalışma Sayfası & Formül Büyük (ZIP içi sıkıştırılmış XML) Zengin (Hücre formatlama, tarih, formül) Yerel Microsoft Office Standardı Finansal raporlama, pivot tablolar, son kullanıcı sunumları.

Gerçek Dünya Senaryoları & Uygulamalı Vaka Analizleri

Vaka 1: E-Ticaret Pazaryeri API Sipariş JSON'unun Muhasebe ERP Sistemi İçin Düzleştirilmesi (ETL)

Senaryo & Problem: Trendyol ve Shopify üzerinden günde ortalama 3.500 sipariş alan bir perakende markası, sipariş detaylarını REST API üzerinden JSON dizisi olarak çekmektedir. Ancak şirketin kullandığı kurumsal muhasebe yazılımı (Logo / Mikro ERP), yalnızca tekil satırlardan oluşan CSV formatında fatura kalemlerini içeri alabilmektedir. Orijinal JSON'da her sipariş nesnesinin altında fatura adresi (customer.billing_address) ve birden fazla ürün kalemi barındıran bir dizi (items: [ {...}, {...} ]) yer almaktadır. Dizi doğrudan CSV'ye çevrildiğinde ürünler tek hücrede metin olarak sıkışmakta ve ERP sistemi fatura kalemlerini ayıramamaktadır.

Uygulanan Çözüm: 1-to-N Düzleştirme (Unnesting & Denormalization) ETL algoritması uygulanmıştır. Her bir siparişin içindeki her bir ürün kalemi için bağımsız bir CSV satırı üretilmiş; sipariş numarası, müşteri adı ve vergi kimlik numarası gibi ana üst bilgiler ilgili satırlara kopyalanmıştır:

// JavaScript 1-to-N Unnesting Algoritması
function denormalizeOrdersToCSV(orders) {
  const flatRows = orders.flatMap(order =>
    order.items.map(item => ({
      siparis_no: order.order_id,
      tarih: order.created_at,
      musteri_ad: order.customer.name,
      vkn_tckn: order.customer.tax_id,
      sehir: order.customer.billing_address.city,
      urun_kodu: item.sku,
      adet: item.quantity,
      birim_fiyat: item.unit_price,
      kdv_orani: item.vat_rate
    }))
  );
  return flatRows;
}

Teknik Sonuç: 3.500 karmaşık JSON sipariş dokümanı 8.200 satırlık düzleştirilmiş CSV tablosuna dönüştürülmüştür. ERP içe aktarma aracı dosyayı 2 saniyede sıfır hatayla işlemiş; muhasebe departmanının her gün 4 saat süren manuel fatura işleme yükü tamamen ortadan kaldırılmıştır.

Vaka 2: Finansal Mutabakat Raporlarında Karakter Bozulması (BOM) ve CSV Formula Injection Koruması

Senaryo & Problem: Bir fintech girişiminin kullanıcı panelinde, müşterilerin hesap hareketlerini CSV formatında indirmesini sağlayan bir dışa aktarma modülü bulunmaktadır. Sistemde iki ciddi kriz tespit edilmiştir:

  1. Türkçe karakterli açıklamalar (Havale / Şirket Gideri - Çağlar) Excel'de açıldığında Şirket Gideri - ÇaÄŸlar şeklinde okunamaz hale gelmektedir.
  2. Saldırgan bir kullanıcı profil adını ve transfer açıklamasını =CMD|' /C calc'!A0 şeklinde kaydetmiştir. Bu veri CSV olarak dışa aktarılıp muhasebeci tarafından Excel'de açıldığında dinamik veri değişimi (DDE) protokolü üzerinden hesap makinesini çalıştırmış ve potansiyel bir uzaktan kod yürütme (RCE) riski oluşturmuştur.

Uygulanan Çözüm: Çıktı motoruna hem Byte Order Mark (BOM) hem de CSV Sanitizasyon filtresi entegre edilmiştir:

# Güvenli CSV Hücre Sanitizasyonu (Formula Injection Koruması)
function sanitizeCsvCell(value) {
  let str = String(value ?? '');
  # = + - @ \t \r ile başlıyorsa başına tek tırnak ekleyerek formülü düz metne çevir
  if (/^[=+\-@\t\r]/.test(str)) {
    str = "'" + str;
  }
  # RFC 4180 Çift Tırnak Kaçışı
  return '"' + str.replace(/"/g, '""') + '"';
}
# İndirme Dosyasına \uFEFF BOM İmzası Ekleme
const csvBlob = new Blob(['\uFEFF' + csvContent], { type: 'text/csv;charset=utf-8;' });

Teknik Sonuç: BOM imzası sayesinde Excel tüm Türkçe karakterleri anında tanıdı ve bozulma sıfırlandı. Formül enjeksiyonu koruması sayesinde zararlı komutlar Excel tarafından çalıştırılabilir makro olarak değil, güvenli düz metin olarak hücreye yazıldı ve siber güvenlik açığı kapatıldı.

JSON to CSV Dönüşümünde Sık Yapılan 6 Kritik Hata ve Çözüm Kontrol Listesi

Hata Tipi Görülen Semptom & Risk Hatalı / Eksik Uygulama Doğru & Güvenli Yaklaşım
1. UTF-8 BOM Eksikliği CSV Excel'de açıldığında Türkçe karakterler (ş, ğ, ı, ö, ç) bozulur (Mojibake). Düz metin UTF-8 olarak dosya indirtmek. Dosya içeriğinin en başına \uFEFF (0xEF, 0xBB, 0xBF) bayt imzasını ekleyin.
2. Hücre İçi Virgül Kaçırmama Adres veya açıklamada virgül varsa hücre bölünür; tüm takip eden sütunlar yana kayar. row.join(',') ile doğrudan birleştirmek. RFC 4180 uyarınca hücreleri çift tırnak içine alın: '"' + val.replace(/"/g, '""') + '"'.
3. Heterojen JSON Başlık Kaybı MongoDB gibi yapılarda sonraki objelerde olan yeni anahtarlar ilk objede yoksa kaybolur. Object.keys(data[0]) ile yalnızca ilk objeyi taramak. Tüm objeleri döngüyle tarayıp tüm anahtarların birleşim kümesini (Set/Union) başlık yapın.
4. CSV Formula Injection İhmali =1+1 veya =cmd| ile başlayan veriler Excel'de komut veya formül çalıştırır. Kullanıcı girdisini ham haliyle CSV hücresine yazmak. =, +, -, @ ile başlayan değerlerin başına tek tırnak (') ekleyin.
5. Sayısal Kodların Sıfır Kaybı Excel TCKN, Vergi No, Telefon veya IBAN'ı sayı kabul edip baştaki sıfırları (0535...) siler. Telefon numarasını doğrudan sayı olarak CSV'ye basmak. CSV'de formül formatı kullanarak metne zorlayın: '="05351234567"' veya metin hücresi olarak saklayın.
6. Bölgesel Ayraç Uyuşmazlığı Türkiye ve Avrupa Excel'lerinde ondalık ayracı virgül olduğu için virgüllü CSV tek sütuna yığılır. Her lokasyon için sabit virgül (,) ayracı kullanmak. Yerel kullanıcılar için noktalı virgül (;) seçeneği sunun veya dosya başına sep=, direktifi koyun.

JSON to CSV Hakkında Sıkça Sorulan Sorular

JSON hiyerarşik yapısı ile CSV tablo yapısı arasındaki temel ontolojik fark nedir ve flattening nasıl çalışır?
JSON çok katmanlı nesneleri (objects) ve listeleri (arrays) destekleyen hiyerarşik bir ağaç yapısıdır; CSV ise satır ve sütunlardan oluşan iki boyutlu düz (flat) bir tablodur. İç içe JSON verisini CSV'ye uyarlamak için düzleştirme (flattening) uygulanır; örneğin user nesnesi altındaki address.city alanı 'user.address.city' sütun başlığına çevrilir. Bire-çok (1-to-N) dizi içeren verilerde ise ya her alt eleman için ana kayıt yinelenir ya da dizi tek bir hücrede serileştirilmiş metin olarak tutulur.
Microsoft Excel'de CSV açarken Türkçe karakterlerin bozulmasını (BOM sorunu) önlemek için ne yapılmalıdır?
Microsoft Excel, UTF-8 CSV dosyalarını varsayılan olarak yerel ANSI veya Windows-1254 kodlamasıyla açmaya çalışır; bu durum ş, ğ, ı, ö, ç gibi Türkçe karakterlerin bozuk (Mojibake) görünmesine yol açar. Bu sorunu önlemek için oluşturulan CSV dosyasının en başına 3 baytlık UTF-8 Byte Order Mark (BOM - \uFEFF / 0xEF 0xBB 0xBF) eklenmelidir. Bu imza Excel'e dosyanın UTF-8 olduğunu bildirir ve karakterleri kusursuz render eder.
CSV formatında RFC 4180 standardı nedir ve hücre içi virgül, tırnak ve satır sonları nasıl kaçırılır?
IETF RFC 4180 standardına göre, eğer bir hücrenin içeriğinde ayraç karakteri (virgül veya noktalı virgül), satır sonu (CRLF) veya çift tırnak (") bulunuyorsa, o hücre mutlaka çift tırnak içine alınmalıdır. Hücre içindeki mevcut çift tırnak işaretleri ise yan yana iki adet çift tırnak ("") yazılarak kaçırılır (escape).
CSV Injection (Formula Injection / DDE) saldırısı nedir ve dönüştürülen verilerde nasıl engellenir?
CSV Injection, kötü niyetli kullanıcıların form alanlarına '=', '+', '-', '@', '\t' veya '\r' ile başlayan metinler girmesiyle oluşur. Bu veriler CSV olarak dışa aktarılıp Excel veya Google Sheets'te açıldığında hesap tablosu motoru bunları zararlı DDE komutları veya harici veri sızdıran formüller olarak çalıştırabilir. Savunma için bu karakterlerle başlayan hücre değerlerinin önüne tek tırnak (') eklenerek içerik zorunlu düz metin haline getirilmelidir.
JSON dizisinde farklı objelerin farklı anahtarlara sahip olması (heterojen veri) durumunda CSV başlıkları nasıl oluşturulmalıdır?
MongoDB veya NoSQL çıktılarında her JSON dokümanı farklı alanlara sahip olabilir. Sadece ilk objenin anahtarlarını almak eksik sütunlara ve veri kaybına yol açar. Doğru yöntem, tüm JSON dizisini önceden tarayarak karşılaşılan tüm benzersiz anahtarların birleşim kümesini (union set) çıkarmak ve ilgili anahtara sahip olmayan objelerin hücrelerini boş dize ('') ile doldurmaktır.
Büyük veri setlerinde (100.000+ satır) JSON to CSV dönüşümü yapılırken tarayıcı belleği (RAM) nasıl optimize edilir?
Yüz binlerce satırlık JSON verisini tek bir devasa JavaScript string değişkeninde birleştirmek tarayıcının çökmesine (Out of Memory) neden olabilir. Bellek optimizasyonu için veriler Blob parçaları halinde (chunking) işlenmeli veya Web Worker ile arka plan iş parçacığına aktarılmalıdır. İndirme aşamasında ise bellek yükünü sıfırlamak için URL.createObjectURL ile akış tabanlı sanal bağlantı üretilmelidir.

Kurumsal API, ERP ve Büyük Veri Entegrasyonu Çözümleri

E-ticaret pazaryerleri, muhasebe yazılımları, CRM ve özel veritabanları arasında sıfır veri kaybı garantili, yüksek performanslı ETL veri köprüleri inşa ediyoruz. İşletmenizi otomatikleştirmek için bize ulaşın.

Teklif Alın

Projenizi Anlatın

Fikirlerinizi gerçeğe dönüştürmek için ilk adımı atın. Uzman ekibimiz hemen dönüş yapsın.

Talebiniz başarıyla alındı.
Size en kısa sürede ulaşacağız.
Hemen Ara WhatsApp Teklif Al