Конвертування даних JSON у електронну таблицю Excel є частою вимогою для звітності, аналізу даних та сценаріїв інтеграції. Aspose.3D Cloud SDK for Node.JS надає потужну бібліотеку, яка ефективно виконує це перетворення на боці сервера. У цьому посібнику ви дізнаєтеся, як потоково обробляти JSON, перевіряти його структуру, конвертувати його у CSV, і в кінці створити файл XLSX з мінімальним використанням пам’яті за допомогою Aspose.3D.
Повний приклад коду: потокове перетворення JSON у XLSX у Node.JS
Цей приклад демонструє, як прочитати файл JSON, перетворити його в проміжний CSV, а потім використати Aspose.3D Cloud SDK для створення книги Excel у форматі XLSX.
// 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);
}
})();
Примітка: Цей приклад коду демонструє основну функціональність. Перш ніж використовувати його у вашому проєкті, переконайтеся, що оновили всі шляхи до файлів та значення конфігурації, щоб вони відповідали вашому реальному середовищу, перевірте, що всі необхідні залежності правильно встановлені, і ретельно протестуйте у вашому середовищі розробки. Якщо ви зіткнетеся з будь-якими проблемами, будь ласка, зверніться до офіційної документації або зв’яжіться з командою підтримки для отримання допомоги.
Конвертація JSON у XLSX за допомогою REST API з використанням cURL
Ви можете досягти того ж результату без написання коду, викликавши безпосередньо кінцеву точку конвертації Aspose.3D. Нижче наведено кроки, які показують, як отримати токен доступу, завантажити CSV‑файл, запросити конвертацію та завантажити вихідний файл XLSX.
# 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
Вищевказані команди ілюструють повний сквозний робочий процес для JSON у XLSX у Node.JS сценаріїв, коли ви віддаєте перевагу чистому підходу REST. Для отримання додаткової інформації перегляньте офіційну документацію API.
Як працює ефективне за пам’яттю перетворення JSON у XLSX у Node.JS
Процес конвертації розбитий на чіткі етапи, які забезпечують низьке використання пам’яті:
- Читання та перевірка JSON - Скрипт використовує
fs.readFileSyncдля завантаження файлу JSON, а потім викликаєvalidateJsonData. Ця функція перевіряє, що кореневий елемент є масивом і що кожен елемент є об’єктом, запобігаючи потраплянню некоректних даних у подальші етапи.
const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
validateJsonData(jsonData);
- Перетворити JSON у CSV - Під час однократного перебору масиву JSON код створює рядок CSV у пам’яті. Генерація заголовків використовує
Object.keysна першому об’єкті, забезпечуючи відповідність порядку колонок даним.
const headers = Object.keys(jsonData[0]);
const csvLines = [headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',')];
-
Записати тимчасовий CSV файл - Вміст CSV записується у тимчасовий файл (
temp_input.csv). Цей крок задовольняє вимоги Aspose.3D API, який очікує файл як вхідний параметр, при цьому все ще дозволяє потокову передачу пізніше.fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' }); -
Stream File to Buffer -
streamFileToBufferчитає тимчасовий CSV за допомогою read stream, збираючи частини в одинBuffer. Це дозволяє уникнути завантаження всього файлу в один великий рядок одразу.
const inputBuffer = await streamFileToBuffer(tempCsvPath);
-
Виконати конвертацію - Створюється
ConvertDocumentRequestзformat: 'xlsx'та буферизованим CSV. SDK надсилає дані до хмарного сервісу, який повертає XLSXBuffer.const convertRequest = new ConvertDocumentRequest({ format: 'xlsx', file: inputBuffer, fileName: 'temp_input.csv' }); const conversionResult = await convertApi.convertDocument(convertRequest); -
Записати XLSX на диск - Отриманий буфер записується за допомогою
writeBufferToFile, завершуючи конвеєр, не зберігаючи повний файл XLSX у пам’яті довше, ніж це необхідно.
await writeBufferToFile(conversionResult, outputXlsxPath);
Кожен крок розроблений для JSON до XLSX потокової обробки в Node.JS та JSON до XLSX з ефективним використанням пам’яті в Node.JS, що робить рішення придатним для великих наборів даних.
Підготовка середовища для експорту JSON у XLSX — передумови та налаштування
Перш ніж почати, переконайтеся, що виконані наступні передумови:
- Node.js 14+ встановлений на вашому комп’ютері.
- Обліковий запис Aspose Cloud з client ID та client secret.
- Доступ до інтернету для викликів API.
Встановіть Aspose.3D Cloud SDK for Node.JS via npm:
npm install aspose3dcloud
Ви також можете завантажити пакет безпосередньо зі сторінки випуску: Aspose.3D Cloud SDK for Node.JS Download.
Налаштуйте свої облікові дані як змінні середовища або встановіть їх у файл .env:
export ASPOSE_CLIENT_ID=YOUR_CLIENT_ID
export ASPOSE_CLIENT_SECRET=YOUR_CLIENT_SECRET
Після встановлення SDK та підготовки облікових даних ви готові запустити скрипт конвертації.
Ключові висновки
Перетворення JSON у XLSX у Node.JS стає простим, коли ви використовуєте Aspose.3D Cloud SDK for Node.JS. Бібліотека обробляє потокову передачу, валідацію та конвертацію форматів, зберігаючи низьке використання пам’яті, що є важливим для великих JSON‑нагрузок. Наведений приклад коду та еквівалентний cURL‑процес надають вам гнучкість у виборі між повнофункціональною бібліотекою та легким REST‑запитом. Пам’ятайте про захист ваших облікових даних Aspose Cloud та отримання належної ліцензії для використання у продакшн‑середовищі. Ви можете отримати тимчасову ліцензію на сторінці тимчасової ліцензії і оновити її до повної ліцензії, коли будете готові до розгортання.
Питання та відповіді
Чи можу я конвертувати JSON у XLSX у Node.JS без завантаження всього файлу в пам’ять?
Так. Стрімінгові допоміжні засоби SDK (streamFileToBuffer) та проміжний формат CSV дозволяють обробляти дані частинами, досягаючи JSON у XLSX з економією пам’яті у Node.JS перетворення.
Який формат файлу очікує SDK як вхідний для конвертації?
Кінцева точка конвертації працює з CSV як проміжним форматом. У прикладі створюється тимчасовий файл CSV, оскільки Aspose.3D очікує файл як вхідні дані перед створенням XLSX.
Як обробляти великі набори даних, які перевищують типові обмеження пам’яті?
Використовуйте підхід потокової обробки, продемонстрований у коді. Він читає вихідний файл за допомогою потоку читання, формує CSV рядок за рядком і надсилає буфер у хмарний сервіс, забезпечуючи, що в пам’яті одночасно знаходяться лише невеликі частини.
Чи є спосіб автоматизувати процес у CI/CD конвеєрі?
Звичайно. Той самий скрипт Node.JS можна викликати з скриптів збірки, а команди cURL можна інтегрувати у кроки оболонки. Просто переконайтеся, що змінні середовища ASPOSE_CLIENT_ID та ASPOSE_CLIENT_SECRET надаються безпечно.