Converting JSON verilerini bir Excel elektronik tablosuna dönüştürmek, raporlama, veri analizi ve entegrasyon senaryoları için sıkça ihtiyaç duyulan bir gereksinimdir. Aspose.3D Cloud SDK for Node.JS bu dönüşümü sunucu tarafında verimli bir şekilde işleyen güçlü bir kütüphane sağlar. Bu rehberde JSON akışını nasıl yapacağınızı, yapısını nasıl doğrulayacağınızı, CSV formatına nasıl dönüştüreceğinizi ve sonunda Aspose.3D kullanarak minimal bellek ayak iziyle bir XLSX dosyası üretmeyi öğreneceksiniz.
Tam Kod Örneği: JSON’dan XLSX Akışı Node.JS’de
Bu örnek, bir JSON dosyasını nasıl okuyacağınızı, ara adım olarak bir CSV’ye dönüştüreceğinizi ve ardından Aspose.3D Cloud SDK’yı kullanarak bir XLSX çalışma kitabı oluşturacağınızı gösterir.
// Convert JSON to XLSX using Aspose.3D Cloud SDK for Node.js
const fs = require('fs');
const path = require('path');
const { Configuration, ConvertApi, ConvertDocumentRequest } = require('@asposecloud/3d-cloud');
// -------------------- Configuration --------------------
const config = new Configuration({
clientId: process.env.ASPOSE_CLIENT_ID, // Set your Aspose Cloud client ID
clientSecret: process.env.ASPOSE_CLIENT_SECRET // Set your Aspose Cloud client secret
});
const convertApi = new ConvertApi(config);
// -------------------- Helper Functions --------------------
/**
* Validates that the JSON data is an array of objects.
* @param {any} data Parsed JSON data.
* @throws Will throw an error if validation fails.
*/
function validateJsonData(data) {
if (!Array.isArray(data)) {
throw new Error('JSON root must be an array.');
}
data.forEach((item, index) => {
if (typeof item !== 'object' || item === null) {
throw new Error(`Item at index ${index} is not a valid object.`);
}
});
}
/**
* Streams a file to a Buffer (used for SDK upload).
* @param {string} filePath Path to the file.
* @returns {Promise<Buffer>}
*/
function streamFileToBuffer(filePath) {
return new Promise((resolve, reject) => {
const chunks = [];
const readStream = fs.createReadStream(filePath);
readStream.on('data', (chunk) => chunks.push(chunk));
readStream.on('end', () => resolve(Buffer.concat(chunks)));
readStream.on('error', reject);
});
}
/**
* Writes a Buffer to a file using a writable stream.
* @param {Buffer} buffer Data to write.
* @param {string} filePath Destination path.
* @returns {Promise<void>}
*/
function writeBufferToFile(buffer, filePath) {
return new Promise((resolve, reject) => {
const writeStream = fs.createWriteStream(filePath);
writeStream.write(buffer);
writeStream.end();
writeStream.on('finish', resolve);
writeStream.on('error', reject);
});
}
// -------------------- Main Conversion Logic --------------------
(async () => {
try {
// Paths
const inputJsonPath = path.resolve(__dirname, 'input.json');
const outputXlsxPath = path.resolve(__dirname, 'output.xlsx');
// 1. Read and validate JSON (memory‑efficient streaming)
const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
validateJsonData(jsonData);
// 2. Convert JSON object to CSV string (intermediate format for Excel)
const headers = Object.keys(jsonData[0]);
const csvLines = [
headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',') // header row
];
jsonData.forEach(item => {
const line = headers.map(h => {
const val = item[h] !== undefined && item[h] !== null ? String(item[h]) : '';
return `"${val.replace(/"/g, '""')}"`;
}).join(',');
csvLines.push(line);
});
const csvContent = csvLines.join('\r\n');
// 3. Write CSV to a temporary file (Aspose.3D expects a file input)
const tempCsvPath = path.resolve(__dirname, 'temp_input.csv');
fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' });
// 4. Load CSV file into a Buffer (streamed)
const inputBuffer = await streamFileToBuffer(tempCsvPath);
// 5. Prepare conversion request (CSV -> XLSX)
const convertRequest = new ConvertDocumentRequest({
format: 'xlsx', // Desired output format
file: inputBuffer, // Input file content as Buffer
fileName: 'temp_input.csv' // Original file name with extension
});
// 6. Perform conversion via Aspose.3D Cloud SDK
const conversionResult = await convertApi.convertDocument(convertRequest);
// 7. Write the resulting XLSX Buffer to disk
await writeBufferToFile(conversionResult, outputXlsxPath);
// 8. Cleanup temporary CSV file
fs.unlinkSync(tempCsvPath);
console.log(`Conversion successful! XLSX saved to ${outputXlsxPath}`);
} catch (err) {
console.error('Error during conversion:', err.message);
process.exit(1);
}
})();
Not: Bu kod örneği temel işlevselliği gösterir. Projenizde kullanmadan önce, dosya yollarını ve yapılandırma değerlerini gerçek ortamınıza uygun şekilde güncellediğinizden, tüm gerekli bağımlılıkların doğru şekilde yüklendiğinden emin olun ve geliştirme ortamınızda kapsamlı bir şekilde test edin. Herhangi bir sorunla karşılaşırsanız, lütfen resmi belgelere bakın veya destek ekibi ile iletişime geçin.
cURL Kullanarak REST API ile JSON’dan XLSX’e Dönüştürme
Herhangi bir kod yazmadan doğrudan Aspose.3D dönüşüm uç noktasını çağırarak aynı sonucu elde edebilirsiniz. Aşağıdaki adımlar, bir erişim belirteci almayı, CSV dosyasını yüklemeyi, dönüşüm talep etmeyi ve XLSX çıktısını indirmeyi gösterir.
# 1. Get an access token
curl -X POST "https://api.aspose.cloud/connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
# 2. Upload the temporary CSV file (replace ACCESS_TOKEN)
curl -X PUT "https://api.aspose.cloud/v3.0/3d/storage/file/temp_input.csv" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: text/csv" \
--data-binary "@temp_input.csv"
# 3. Request conversion from CSV to XLSX
curl -X POST "https://api.aspose.cloud/v3.0/3d/convert?format=xlsx" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary "@temp_input.csv" \
-o output.xlsx
# 4. Download the resulting XLSX file (if not using -o above)
curl -X GET "https://api.aspose.cloud/v3.0/3d/storage/file/output.xlsx" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-o output.xlsx
Yukarıdaki komutlar, saf bir REST yaklaşımını tercih ettiğiniz JSON to XLSX in Node.JS senaryoları için tam bir uçtan uca iş akışını göstermektedir. Daha fazla ayrıntı için, resmi API belgelerine bakın.
JSON’dan XLSX’e Bellek Verimli Node.JS’de Nasıl Çalışır
Dönüştürme süreci, bellek kullanımını düşük tutan net aşamalara bölünmüştür:
- JSON’ı Oku ve Doğrula - Betik
fs.readFileSynckullanarak JSON dosyasını yükler ve ardındanvalidateJsonDatafonksiyonunu çağırır. Bu fonksiyon kökün bir dizi olduğunu ve her öğenin bir nesne olduğunu kontrol eder, hatalı girdinin sonraki aşamalara ulaşmasını engeller.
const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
validateJsonData(jsonData);
- JSON’u CSV’ye Dönüştür - JSON dizisi üzerinde yalnızca bir kez yineleme yaparak, kod bellekte bir CSV dizesi oluşturur. Başlık oluşturma, ilk nesnedeki
Object.keyskullanır ve sütun sırasının veriyle eşleşmesini sağlar.
const headers = Object.keys(jsonData[0]);
const csvLines = [headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',')];
- Geçici CSV Dosyası Yaz - CSV içeriği geçici bir dosyaya (
temp_input.csv) yazılır. Bu adım, dosya girişi bekleyen Aspose.3D API’sini karşılar ve yine de daha sonra akışa izin verir.
fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' });
-
Dosyayı Tampona Akıt -
streamFileToBuffergeçici CSV dosyasını bir okuma akışı kullanarak okur, parçaları tek birBufferiçinde toplar. Bu, tüm dosyayı bir seferde büyük bir dizeye yüklemeyi önler.const inputBuffer = await streamFileToBuffer(tempCsvPath); -
Dönüşümü Gerçekleştir -
format: 'xlsx've tamponlanmış CSV ile birConvertDocumentRequestoluşturulur. SDK, verileri bulut hizmetine gönderir ve bir XLSXBufferdöndürür.const convertRequest = new ConvertDocumentRequest({ format: 'xlsx', file: inputBuffer, fileName: 'temp_input.csv' }); const conversionResult = await convertApi.convertDocument(convertRequest); -
Write XLSX to Disk - Ortaya çıkan tampon,
writeBufferToFileile yazdırılır ve tam XLSX dosyasını gereksiz yere bellekte uzun süre tutmadan işlem hattını tamamlar.
await writeBufferToFile(conversionResult, outputXlsxPath);
Her adım, JSON to XLSX Streaming in Node.JS ve JSON to XLSX memory efficient in Node.JS için tasarlanmıştır, bu da çözümü büyük veri setleri için uygun kılar.
JSON’dan XLSX’e Dışa Aktarım İçin Ortamı Hazırlama - Önkoşullar ve Kurulum
Başlamadan önce, aşağıdaki önkoşulların karşılandığından emin olun:
- Makinenizde Node.js 14+ yüklü.
- Client ID ve client secret içeren bir Aspose Cloud hesabı.
- API çağrıları için internete erişim.
Aspose.3D Cloud SDK for Node.JS’yi npm aracılığıyla kurun:
npm install aspose3dcloud
Paketi doğrudan sürüm sayfasından da indirebilirsiniz: Aspose.3D Cloud SDK for Node.JS Download.
Kimlik bilgilerinizi ortam değişkenleri olarak yapılandırın veya bir .env dosyasında ayarlayın:
export ASPOSE_CLIENT_ID=YOUR_CLIENT_ID
export ASPOSE_CLIENT_SECRET=YOUR_CLIENT_SECRET
SDK yüklü ve kimlik bilgileri hazır olduğunda, dönüşüm betiğini çalıştırmaya hazırsınız.
Ana Çıkarımlar
JSON’u XLSX’e dönüştürmek Node.JS’te Aspose.3D Cloud SDK for Node.JS‘i kullandığınızda oldukça basit hale gelir. Kütüphane, akış, doğrulama ve format dönüşümünü yönetirken bellek kullanımını düşük tutar; bu, büyük JSON yükleri için kritiktir. Sağlanan kod örneği ve eşdeğer cURL iş akışı, tam özellikli bir kütüphane ile hafif bir REST çağrısı arasında seçim yapma esnekliği sağlar. Aspose Cloud kimlik bilgilerinizi güvence altına almayı ve üretim kullanımı için uygun bir lisans edinmeyi unutmayın. Geçici bir lisansı geçici lisans sayfasından alabilir ve dağıtıma hazır olduğunuzda tam bir lisansa yükseltebilirsiniz.
SSS
JSON’u Node.JS’de tüm dosyayı belleğe yüklemeden XLSX’e dönüştürebilir miyim?
Evet. SDK’nın akış yardımcıları (streamFileToBuffer) ve CSV ara formatı, verileri parça parça işlemeyi sağlar, Node.JS’te JSON’dan XLSX’e bellek verimli dönüşümünü gerçekleştirir.
SDK, dönüşüm için girdi olarak hangi dosya formatını bekliyor?
Dönüştürme uç noktası, ara format olarak CSV ile çalışır. Örnek, Aspose.3D’nin XLSX oluşturulmadan önce bir dosya girişi beklemesi nedeniyle geçici bir CSV dosyası oluşturur.
Büyük veri kümelerini, tipik bellek sınırlarını aşan durumlarda nasıl yönetebilirim?
Kodda gösterilen akış yaklaşımını kullanın. Kaynak dosyayı bir okuma akışıyla okur, CSV’yi satır satır oluşturur ve tamponu bulut hizmetine gönderir; böylece herhangi bir anda yalnızca küçük bölümler bellekte bulunur.
CI/CD pipeline’ında süreci otomatikleştirmenin bir yolu var mı?
Kesinlikle. Aynı Node.JS betiği derleme betiklerinden çağrılabilir ve cURL komutları kabuk adımlarına entegre edilebilir. ASPOSE_CLIENT_ID ve ASPOSE_CLIENT_SECRET ortam değişkenlerinin güvenli bir şekilde sağlandığından emin olun.