Преобразование данных JSON в электронную таблицу Excel является частой потребностью для отчетности, анализа данных и сценариев интеграции. Aspose.3D Cloud SDK for Node.JS предоставляет мощную библиотеку, которая эффективно обрабатывает это преобразование на стороне сервера. В этом руководстве вы узнаете, как потоково обрабатывать JSON, проверять его структуру, преобразовывать его в CSV, и в конечном итоге создавать файл XLSX с минимальными затратами памяти, используя Aspose.3D.
Полный пример кода: потоковая передача JSON в XLSX в Node.JS
Этот пример демонстрирует, как прочитать файл JSON, преобразовать его в промежуточный CSV и затем использовать Aspose.3D Cloud SDK для создания рабочей книги 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 to XLSX in 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' });
-
Потоковый файл в буфер -
streamFileToBufferчитает временный CSV с помощью потока чтения, собирая фрагменты в один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 to XLSX Streaming in Node.JS и JSON to XLSX memory efficient in Node.JS, делая решение подходящим для работы с большими наборами данных.
Подготовка среды для экспорта JSON в XLSX - Предпосылки и настройка
Прежде чем начать, убедитесь, что выполнены следующие предварительные условия:
- Node.js 14+ установлен на вашем компьютере.
- Учетная запись Aspose Cloud с client ID и client secret.
- Доступ к интернету для вызовов API.
Установите Aspose.3D Cloud SDK for Node.JS через 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‑workflow дают вам гибкость выбора между полнофункциональной библиотекой и легковесным 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 предоставлены безопасным образом.