JSON 데이터를 Excel 스프레드시트로 변환하는 것은 보고, 데이터 분석 및 통합 시나리오에서 자주 요구됩니다. Aspose.3D Cloud SDK for Node.JS는 서버 측에서 이 변환을 효율적으로 처리하는 강력한 라이브러리를 제공합니다. 이 가이드에서는 JSON을 스트리밍하고, 구조를 검증하며, CSV로 변환하고, 최종적으로 최소 메모리 사용량으로 XLSX 파일을 생성하는 방법을 배웁니다.
전체 코드 예제: Node.JS에서 JSON을 XLSX 스트리밍
이 예제는 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 접근 방식을 선호하는 JSON to XLSX in Node.JS 시나리오에 대한 완전한 엔드‑투‑엔드 워크플로를 보여줍니다. 자세한 내용은 공식 API 문서를 참조하십시오.
Node.JS에서 JSON을 XLSX로 메모리 효율적으로 변환하는 방법
변환 프로세스는 메모리 사용량을 낮게 유지하는 명확한 단계로 나뉩니다:
- Read and Validate 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+가 머신에 설치되어 있어야 합니다.
- 클라이언트 ID와 클라이언트 비밀이 포함된 Aspose Cloud 계정.
- 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가 설치되고 자격 증명이 준비되면, 변환 스크립트를 실행할 준비가 됩니다.
Key Takeaways
Node.JS에서 JSON을 XLSX로 변환하는 작업은 Aspose.3D Cloud SDK for Node.JS를 활용하면 간단해집니다. 이 라이브러리는 스트리밍, 검증 및 형식 변환을 처리하면서 메모리 사용량을 낮게 유지하므로 대용량 JSON 페이로드에 필수적입니다. 제공된 코드 예제와 동등한 cURL 워크플로우를 통해 전체 기능을 갖춘 라이브러리와 가벼운 REST 호출 중에서 선택할 수 있는 유연성을 제공합니다. Aspose Cloud 자격 증명을 안전하게 보호하고 프로덕션 사용을 위한 적절한 라이선스를 확보하는 것을 기억하세요. 임시 라이선스는 temporary license page에서 획득할 수 있으며, 배포 준비가 되면 정식 라이선스로 업그레이드할 수 있습니다.
FAQs
Node.JS에서 전체 파일을 메모리로 로드하지 않고 JSON을 XLSX로 변환할 수 있나요?
예. SDK의 스트리밍 도우미(streamFileToBuffer)와 CSV 중간 형식을 사용하면 데이터를 청크 단위로 처리할 수 있어 JSON to XLSX memory efficient in Node.JS 변환을 달성합니다.
SDK가 변환을 위해 입력으로 기대하는 파일 형식은 무엇인가요?
변환 엔드포인트는 중간 형식으로 CSV를 사용합니다. 예제는 Aspose.3D가 XLSX를 생성하기 전에 파일 입력을 필요로 하기 때문에 임시 CSV 파일을 생성합니다.
일반적인 메모리 제한을 초과하는 대용량 데이터 세트를 어떻게 처리합니까?
코드에서 시연된 스트리밍 방식을 사용하십시오. 이 방식은 읽기 스트림으로 소스 파일을 읽고, CSV를 한 줄씩 구축하며, 버퍼를 클라우드 서비스에 전송하여 언제든지 메모리에 작은 부분만 존재하도록 보장합니다.
CI/CD 파이프라인에서 프로세스를 자동화할 방법이 있나요?
물론입니다. 동일한 Node.JS 스크립트를 빌드 스크립트에서 호출할 수 있으며, cURL 명령은 셸 단계에 통합할 수 있습니다. ASPOSE_CLIENT_ID 및 ASPOSE_CLIENT_SECRET 환경 변수가 안전하게 제공되는지 확인하십시오.