Node.js İle Farklı Veri Formatları Arasında Veri Dönüştürücü Nasıl Yapılır?

Node.js İle Farklı Veri Formatları Arasında Veri Dönüştürücü Nasıl Yapılır?
Node.js İle Farklı Veri Formatları Arasında Veri Dönüştürücü Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Geliştirme ortamınızın 2026 yılı standartlarına uygun olması, güvenlik ve performans açısından hayati önem taşır. Öncelikle bilgisayarınızda Node.js'in en güncel LTS (Uzun Süreli Destek) sürümünün yüklü olduğundan emin olun.

  • Node.js (v22 veya üzeri önerilir)
  • npm veya pnpm paket yöneticisi
  • Kod editörü olarak VS Code
  • Temel JavaScript (ES6+ sözdizimi) bilgisi

Projenizi başlatmak için terminalinizde şu komutları çalıştırarak gerekli bağımlılıkları yükleyin:

mkdir veri-donusturucu
cd veri-donusturucu
npm init -y
npm install csvtojson json2csv xml2js

Bu komutlar, CSV dosyalarını JSON'a, JSON dosyalarını CSV'ye ve XML verilerini işlemek için gerekli olan endüstri standardı kütüphaneleri projenize dahil edecektir.

JSON ve CSV Arasındaki Dönüşüm Mantığı

JSON (JavaScript Object Notation), web dünyasının veri değişim formatı iken, CSV (Comma Separated Values) genellikle veri analizi ve tablo tabanlı sistemlerde tercih edilir. Dönüşüm yaparken en büyük zorluk, iç içe geçmiş (nested) JSON nesnelerini düz bir CSV yapısına nasıl aktaracağınızdır.

Aşağıdaki kod örneği, basit bir JSON dizisini CSV formatına dönüştürmek için json2csv kütüphanesinin nasıl kullanılacağını gösterir:

const { Parser } = require('json2csv');

const veri = [
  { ad: "Ahmet", soyad: "Yılmaz", yas: 28 },
  { ad: "Ayşe", soyad: "Demir", yas: 24 }
];

const alanlar = ['ad', 'soyad', 'yas'];
const parser = new Parser({ fields: alanlar });
const csv = parser.parse(veri);

console.log(csv);

Bu kod bloğu, tanımlanan JSON nesnelerini satır bazlı bir CSV metnine dönüştürür. fields dizisi, CSV dosyanızın başlıklarını belirler ve verinin düzenli olmasını sağlar.

XML Verilerini JSON'a Dönüştürme

XML, eski sistemlerde hala yaygın olarak kullanılan bir formattır. Node.js içerisinde xml2js kütüphanesi ile XML verilerini JavaScript nesnelerine dönüştürebilirsiniz. Bu işlem, XML verisini işleyip daha sonra bir veritabanına kaydetmek veya API üzerinden sunmak için oldukça pratiktir.

const xml2js = require('xml2js');

const xmlVeri = `MehmetAdmin`;

xml2js.parseString(xmlVeri, (hata, sonuc) => {
  if (hata) {
    console.error("XML ayrıştırma hatası:", hata);
    return;
  }
  console.log(JSON.stringify(sonuc, null, 2));
});
```

Burada xml2js kütüphanesini kullanarak XML metnini bir JSON nesnesine dönüştürdük. null, 2 parametreleri, çıktının okunabilir olması için girintili (pretty-print) yazılmasını sağlar.

Veri Dönüştürme Yöntemleri Karşılaştırması

Farklı formatlar arasında seçim yaparken projenizin ihtiyaçlarını göz önünde bulundurmalısınız. Aşağıdaki tablo, yaygın dönüştürme yöntemlerinin temel özelliklerini özetler:

Format Avantaj Dezavantaj Kullanım Alanı
JSON Hızlı ve esnek Büyük dosyalarda bellek kullanımı Web API'leri
CSV Kompakt ve basit Karmaşık veriyi desteklemez Excel/Veri Analizi
XML Şema desteği (XSD) Aşırı detaylı yapı Kurumsal sistemler

Dönüştürücü İçin Hata Yönetimi ve Güvenlik

Veri dönüştürme işlemleri sırasında en büyük risk, hatalı veya kötü niyetli verilerin sisteme girmesidir. Kullanıcıdan gelen veriyi dönüştürürken mutlaka doğrulama (validation) yapmalısınız. Ayrıca, büyük dosyaları işlerken belleği tüketmemek için "stream" (akış) yapısını tercih etmelisiniz.

Güvenlik Uyarısı: XML verilerini ayrıştırırken "XML External Entity (XXE)" saldırılarına karşı dikkatli olun. Güvenilmeyen XML kaynaklarını işlerken kütüphanenizin güvenlik ayarlarını (örneğin explicitRoot veya ignoreAttrs) yapılandırdığınızdan emin olun.

Aşağıdaki örnekte, dosya okuma işlemini stream kullanarak nasıl daha güvenli hale getireceğinizi görebilirsiniz:

const fs = require('fs');
const csv = require('csvtojson');

const okumaAkisi = fs.createReadStream('veri.csv');

okumaAkisi
  .pipe(csv())
  .on('data', (satir) => {
    // Her satırı burada işleyin
    console.log("İşlenen satır:", satir);
  })
  .on('end', () => {
    console.log("Dönüşüm tamamlandı.");
  });

Bu yöntem, dosyanın tamamını belleğe yüklemeden satır satır işlediği için büyük veri setlerinde uygulamanızın çökmesini engeller.

Ölçeklenebilir Bir Dönüştürücü Mimarisi Kurma

Profesyonel bir uygulamada, dönüştürme mantığını tek bir fonksiyonda tutmak yerine, bir "Factory" (Fabrika) tasarım deseni ile modüler hale getirmelisiniz. Bu, gelecekte yeni bir format (örneğin YAML veya Parquet) eklemek istediğinizde kodun geri kalanını değiştirmemenizi sağlar.

class VeriDonusturucu {
  static donustur(format, veri) {
    switch (format) {
      case 'json-to-csv':
        // JSON'dan CSV'ye mantığı
        break;
      case 'xml-to-json':
        // XML'den JSON'a mantığı
        break;
      default:
        throw new Error("Desteklenmeyen format.");
    }
  }
}

Bu yapı, kodunuzun okunabilirliğini artırır ve test edilebilirliğini kolaylaştırır. Yeni bir dönüştürme türü eklemek için sadece ilgili case bloğunu doldurmanız yeterli olacaktır.

Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamında (production) kullanmadan önce mutlaka birim testlerini (unit tests) yazın ve veri temizleme (sanitization) süreçlerini uygulayın.

Sıkça Sorulan Sorular

Node.js ile çok büyük dosyaları nasıl dönüştürürüm?

Dosyaları belleğe yüklemek yerine fs.createReadStream ve fs.createWriteStream kullanarak "pipe" (boru hattı) yöntemini kullanmalısınız. Bu sayede veriler parça parça işlenir.

JSON'dan CSV'ye dönerken iç içe veriler nasıl düzleştirilir?

Düzleştirme (flattening) işlemi için flat kütüphanesini kullanabilir veya nesne üzerinde yinelemeli (recursive) bir fonksiyon yazarak iç içe anahtarları "anahtar.altanahtar" şeklinde birleştirebilirsiniz.

XML dönüştürme sırasında karakter kodlaması hatası alıyorum, ne yapmalıyım?

XML verisini okurken utf-8 kodlamasını kullandığınızdan emin olun. Eğer dosya farklı bir kodlamaya sahipse, iconv-lite gibi kütüphanelerle veriyi okumadan önce dönüştürmeniz gerekebilir.

Dönüştürücü API'mde XSS saldırısını nasıl önlerim?

Dönüştürdüğünüz veriyi bir web arayüzünde gösterecekseniz, veriyi mutlaka HTML entity'lerine çevirin. Veri dönüştürme katmanında değil, veriyi sunum katmanına (frontend) göndermeden önce temizleme yapmalısınız.

Hangi kütüphaneler 2026 yılı için daha performanslıdır?

Daha yüksek performans için fast-csv veya fast-xml-parser gibi kütüphaneler, geleneksel olanlara göre çok daha hızlı sonuçlar verir ve daha az kaynak tüketir.

Veri Dönüştürme Süreçlerinde Otomatik Test ve Doğrulama

Veri dönüştürücülerin güvenilirliğini sağlamak için manuel kontroller yerine otomatik test süreçleri kurmak kritiktir. Özellikle karmaşık XML yapılarından JSON'a geçişlerde, veri kaybı yaşanıp yaşanmadığını doğrulamak için Jest veya Mocha gibi test kütüphanelerini kullanmalısınız. Birim testlerinizde, dönüştürücü fonksiyonunuzun beklenen şema ile çıktısını karşılaştıran "snapshot" testleri oluşturmak, kodunuzu gelecekteki değişikliklere karşı korur.


// converter.test.js örneği
const { xmlToJson } = require('./converter');

test('XML verisi doğru JSON formatına dönüştürülmeli', () => {
  const xmlInput = '1';
  const expectedOutput = { root: { id: '1' } };
  
  const result = xmlToJson(xmlInput);
  expect(result).toEqual(expectedOutput);
});

Dönüştürücü Servislerin Docker ile Deployment Süreci

Dönüştürücü uygulamanızı canlı ortama taşırken, çalışma zamanı ortamının tutarlılığını sağlamak için Docker kullanımı standarttır. Node.js uygulamaları, özellikle büyük dosya işleme süreçlerinde bellek (RAM) limitlerine takılabilir. Dockerfile içerisinde --max-old-space-size parametresini kullanarak Node.js'in bellek yönetimini optimize edebilirsiniz.

Parametre Açıklama
--max-old-space-size=4096 Bellek limitini 4GB olarak ayarlar.
NODE_ENV=production Uygulamayı performans modunda çalıştırır.

Aşağıdaki örnek Dockerfile, uygulamanızın üretim ortamında daha kararlı çalışmasını sağlar:


FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
# Bellek optimizasyonu ile başlatma
CMD ["node", "--max-old-space-size=2048", "index.js"]

İleri Seviye İpucu: Worker Threads Kullanımı

Veri dönüşümü CPU yoğun bir işlemdir. Eğer aynı anda birden fazla kullanıcıya hizmet veren bir API yapınız varsa, ana "Event Loop"un tıkanmaması için worker_threads modülünü kullanmalısınız. Bu sayede ağır dönüştürme işlemleri ana thread'i yormadan arka planda gerçekleştirilir.


const { Worker } = require('worker_threads');

function runConversion(data) {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./worker.js', { workerData: data });
    worker.on('message', resolve);
    worker.on('error', reject);
  });
}

Bu yaklaşım, özellikle büyük CSV dosyalarının JSON'a dönüştürülmesi gibi uzun süren işlemlerde API'nizin yanıt süresini (latency) ciddi oranda düşürecektir.

Sonuç

Node.js ile veri dönüştürme süreçleri, doğru araçlar ve modüler bir mimari ile oldukça verimli bir hale getirilebilir. Bu rehberde, temel kütüphanelerin kullanımı, stream tabanlı güvenli veri işleme yöntemleri ve kodun sürdürülebilirliği üzerine odaklandık. Bir sonraki adım olarak, bu dönüştürücü yapısını bir Express.js sunucusu içerisine yerleştirerek, kullanıcıların dosya yükleyip dönüştürülmüş halini indirebildiği bir API servisi geliştirmeyi deneyebilirsiniz. Başarılar dilerim.

Bu yazıya tepkinizi paylaşın:
Deniz Aydın

On yıllık yaşam tarzı editörlüğü deneyimimle karmaşık süreçleri herkesin anlayabileceği basit adımlara dönüştürüyorum. Okuyucuların günlük yaşam kalitesini artıracak uygulanabilir çözümler üretmeye odaklanıyorum.

Yorumlar (0)

Yorum Yaz