JSON データを Excel スプレッドシートに変換することは、レポート作成、データ分析、統合シナリオで頻繁に求められます。 Aspose.3D Cloud SDK for Node.JS は、サーバー側でこの変換を効率的に処理する強力なライブラリを提供します。本ガイドでは、JSON をストリームし、その構造を検証し、CSV に変換し、最終的に XLSX ファイルを最小限のメモリフットプリントで生成する方法を学びます。

完全コード例: 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);
    }
})();

注: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイル パスや構成値を実際の環境に合わせて更新し、すべての必須依存関係が正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメント または サポートチーム にお問い合わせください。

cURL を使用した REST API による JSON から XLSX への変換

コードを書かずに直接 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

上記のコマンドは、純粋な REST アプローチを好む Node.JS の JSON から XLSX への変換 シナリオ向けの完全なエンドツーエンド ワークフローを示しています。詳細については、公式 API ドキュメントをご覧ください。

Node.JS で JSON を XLSX にメモリ効率的に変換する方法

変換プロセスは、メモリ使用量を低く抑える明確な段階に分割されています:

  1. Read and Validate JSON - スクリプトは fs.readFileSync を使用して JSON ファイルを読み込み、続いて validateJsonData を呼び出します。この関数はルートが配列であること、各要素がオブジェクトであることを確認し、誤った入力が後続の段階に到達するのを防ぎます。
const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, { encoding: 'utf8' }));
validateJsonData(jsonData);
  1. Transform JSON to CSV - JSON 配列を一度だけ反復処理することで、コードはメモリ内に CSV 文字列を構築します。ヘッダーの生成は最初のオブジェクトに対して Object.keys を使用し、列の順序がデータと一致することを保証します。
const headers = Object.keys(jsonData[0]);
const csvLines = [headers.map(h => `"${h.replace(/"/g, '""')}"`).join(',')];
  1. Write Temporary CSV File - CSV コンテンツは一時ファイル (temp_input.csv) に書き込まれます。この手順は、ファイル入力を期待する Aspose.3D API の要件を満たしつつ、後でストリーミングを可能にします。
fs.writeFileSync(tempCsvPath, csvContent, { encoding: 'utf8' });
  1. Stream File to Buffer - streamFileToBuffer は、一時的な CSV を読み取りストリームで読み込み、チャンクを単一の Buffer に収集します。これにより、ファイル全体を一度に大きな文字列としてロードすることを回避できます。

    const inputBuffer = await streamFileToBuffer(tempCsvPath);
    
  2. 変換の実行 - 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);
  1. 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 アカウント(クライアント ID とクライアントシークレットが必要)。
  • API 呼び出しのためのインターネットへのアクセス。

npm を使用して Aspose.3D Cloud SDK for Node.JS をインストールする:

npm install aspose3dcloud

リリースページから直接パッケージをダウンロードすることもできます: Aspose.3D Cloud SDK for Node.JS ダウンロード.

認証情報を環境変数として構成するか、.env ファイルに設定してください。

export ASPOSE_CLIENT_ID=YOUR_CLIENT_ID
export ASPOSE_CLIENT_SECRET=YOUR_CLIENT_SECRET

SDK がインストールされ、認証情報が準備できたら、変換スクリプトを実行する準備が整います。

主なポイント

Node.JS で JSON を XLSX に変換することは、Aspose.3D Cloud SDK for Node.JS を活用すればシンプルになります。ライブラリはストリーミング、検証、フォーマット変換を処理し、メモリ使用量を低く抑えるため、大規模な JSON ペイロードにとって重要です。提供されたコード例と同等の cURL ワークフローにより、フル機能のライブラリと軽量な REST 呼び出しのどちらかを柔軟に選択できます。Aspose Cloud の認証情報を保護し、実運用で使用するために適切なライセンスを取得することを忘れないでください。一時ライセンスページ から一時ライセンスを取得し、デプロイの準備ができたらフルライセンスにアップグレードできます。

よくある質問

Node.JSでJSONをXLSXに変換する際、ファイル全体をメモリに読み込まずに行うことはできますか?

はい。SDK のストリーミングヘルパー(streamFileToBuffer)と CSV 中間フォーマットを使用すると、データをチャンク単位で処理でき、Node.JS での JSON から XLSX へのメモリ効率的な変換 を実現できます。

SDKが変換の入力として期待するファイル形式は何ですか?

変換エンドポイントは中間形式として CSV を使用します。例では、Aspose.3D が XLSX を生成する前にファイル入力を必要とするため、一時的な CSV ファイルを作成しています。

大規模データセットで、通常のメモリ制限を超える場合はどう対処すればよいですか?

コードで示されたストリーミング アプローチを使用します。読み取りストリームでソース ファイルを読み取り、CSV を行ごとに構築し、バッファをクラウド サービスに送信します。これにより、常にメモリに保持されるのは小さな部分だけになります。

CI/CD パイプラインでプロセスを自動化する方法はありますか?

もちろんです。同じ Node.JS スクリプトはビルド スクリプトから呼び出すことができ、cURL コマンドはシェル ステップに組み込むことができます。ASPOSE_CLIENT_ID と ASPOSE_CLIENT_SECRET の環境変数が安全に提供されていることを確認してください。

さらに読む