Конвертування даних 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

Процес конвертації розбитий на чіткі етапи, які забезпечують низьке використання пам’яті:

  1. Читання та перевірка JSON - Скрипт використовує fs.readFileSync для завантаження файлу JSON, а потім викликає validateJsonData. Ця функція перевіряє, що кореневий елемент є масивом і що кожен елемент є об’єктом, запобігаючи потраплянню некоректних даних у подальші етапи.
const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
validateJsonData(jsonData);
  1. Перетворити JSON у CSV - Під час однократного перебору масиву JSON код створює рядок CSV у пам’яті. Генерація заголовків використовує Object.keys на першому об’єкті, забезпечуючи відповідність порядку колонок даним.
const headers = Object.keys(jsonData[0]);
const csvLines = [headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',')];
  1. Записати тимчасовий CSV файл - Вміст CSV записується у тимчасовий файл (temp_input.csv). Цей крок задовольняє вимоги Aspose.3D API, який очікує файл як вхідний параметр, при цьому все ще дозволяє потокову передачу пізніше.

    fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' });
    
  2. Stream File to Buffer - streamFileToBuffer читає тимчасовий CSV за допомогою read stream, збираючи частини в один Buffer. Це дозволяє уникнути завантаження всього файлу в один великий рядок одразу.

const inputBuffer = await streamFileToBuffer(tempCsvPath);
  1. Виконати конвертацію - Створюється ConvertDocumentRequest з format: 'xlsx' та буферизованим CSV. SDK надсилає дані до хмарного сервісу, який повертає XLSX Buffer.

    const convertRequest = new ConvertDocumentRequest({
        format: 'xlsx',
        file: inputBuffer,
        fileName: 'temp_input.csv'
    });
    const conversionResult = await convertApi.convertDocument(convertRequest);
    
  2. Записати 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 надаються безпечно.

Подальше читання