การแปลงข้อมูล 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
คุณสามารถบรรลุผลลัพธ์เดียวกันโดยไม่ต้องเขียนโค้ดใด ๆ โดยการเรียก endpoint การแปลงของ 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);
- Transform JSON to 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 ชั่วคราวโดยใช้ read stream, รวบรวม chunk เข้าด้วยกันเป็นBufferเดียว. วิธีนี้ช่วยหลีกเลี่ยงการโหลดไฟล์ทั้งหมดเป็นสตริงขนาดใหญ่ในครั้งเดียว.
const inputBuffer = await streamFileToBuffer(tempCsvPath);
- ทำการแปลง - คำขอ
ConvertDocumentRequestถูกสร้างด้วยformat: 'xlsx'และ CSV ที่บัฟเฟอร์ไว้ SDK ส่งข้อมูลไปยังบริการคลาวด์ ซึ่งจะคืนค่าBufferของ XLSX.
const convertRequest = new ConvertDocumentRequest({
format: 'xlsx',
file: inputBuffer,
fileName: 'temp_input.csv'
});
const conversionResult = await convertApi.convertDocument(convertRequest);
- Write XLSX to Disk - บัฟเฟอร์ที่ได้จะถูกเขียนออกด้วย
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 ที่เทียบเท่ากันให้ความยืดหยุ่นในการเลือกใช้ระหว่างไลบรารีที่เต็มรูปแบบหรือการเรียก REST ที่เบา จำไว้ว่าให้รักษาข้อมูลประจำตัว Aspose Cloud ของคุณและรับลิขสิทธิ์ที่เหมาะสมสำหรับการใช้งานในสภาพแวดล้อมการผลิต คุณสามารถรับลิขสิทธิ์ชั่วคราวจาก หน้าลิขสิทธิ์ชั่วคราว และอัปเกรดเป็นลิขสิทธิ์เต็มเมื่อคุณพร้อมที่จะเปิดใช้งาน.
FAQs
ฉันสามารถแปลง JSON เป็น XLSX ใน Node.JS ได้โดยไม่ต้องโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำหรือไม่?
ใช่. ตัวช่วยสตรีมของ SDK (streamFileToBuffer) และรูปแบบ CSV ระหว่างขั้นตอนทำให้คุณสามารถประมวลผลข้อมูลเป็นชิ้น ๆ ได้, บรรลุการแปลง JSON เป็น XLSX อย่างมีประสิทธิภาพด้านหน่วยความจำใน Node.JS
SDK คาดหวังรูปแบบไฟล์ใดเป็นอินพุตสำหรับการแปลง?
จุดเชื่อมต่อการแปลงทำงานกับ CSV เป็นรูปแบบกลาง ตัวอย่างสร้างไฟล์ CSV ชั่วคราวเนื่องจาก Aspose.3D ต้องการไฟล์อินพุตก่อนที่จะสร้าง XLSX.
ฉันจะจัดการกับชุดข้อมูลขนาดใหญ่ที่เกินขีดจำกัดหน่วยความจำทั่วไปได้อย่างไร?
ใช้วิธีการสตรีมตามที่แสดงในโค้ด มันอ่านไฟล์ต้นทางด้วยการอ่านสตรีม สร้าง CSV ทีละบรรทัด และส่งบัฟเฟอร์ไปยังบริการคลาวด์ เพื่อให้แน่ใจว่าเฉพาะส่วนเล็ก ๆ เท่านั้นที่อยู่ในหน่วยความจำในแต่ละครั้ง.
มีวิธีใดบ้างที่จะทำให้กระบวนการอัตโนมัติใน pipeline CI/CD?
แน่นอน. สคริปต์ Node.JS เดียวกันสามารถเรียกใช้จากสคริปต์การสร้างได้ และคำสั่ง cURL สามารถรวมเข้ากับขั้นตอนเชลล์ได้ เพียงตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมสำหรับ ASPOSE_CLIENT_ID และ ASPOSE_CLIENT_SECRET ถูกจัดหาอย่างปลอดภัย.