Η μετατροπή δεδομένων JSON σε ένα φύλλο εργασίας Excel είναι συχνή απαίτηση για αναφορές, ανάλυση δεδομένων και σενάρια ενσωμάτωσης. Το Aspose.3D Cloud SDK for Node.JS παρέχει μια ισχυρή βιβλιοθήκη που διαχειρίζεται αυτή τη μετατροπή αποδοτικά στην πλευρά του διακομιστή. Σε αυτόν τον οδηγό θα μάθετε πώς να μεταφέρετε JSON σε ροή, να επικυρώσετε τη δομή του, να το μετατρέψετε σε CSV, και τελικά να δημιουργήσετε ένα αρχείο XLSX με ελάχιστο αποτύπωμα μνήμης χρησιμοποιώντας το Aspose.3D.
Πλήρες Παράδειγμα Κώδικα: JSON σε XLSX Streaming σε 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 σε XLSX σε Node.JS όπου προτιμάτε μια καθαρή προσέγγιση REST. Για περισσότερες λεπτομέρειες, δείτε την επίσημη τεκμηρίωση API.
Πώς λειτουργεί η μετατροπή JSON σε XLSX με αποδοτική χρήση μνήμης στο Node.JS
Η διαδικασία μετατροπής χωρίζεται σε σαφή στάδια που διατηρούν τη χρήση μνήμης χαμηλή:
- Ανάγνωση και Επικύρωση JSON - Το script χρησιμοποιεί
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' });
-
Μεταφορά Αρχείου σε Buffer -
streamFileToBufferδιαβάζει το προσωρινό CSV χρησιμοποιώντας ροή ανάγνωσης, συλλέγοντας τμήματα σε ένα ενιαίοBuffer. Αυτό αποτρέπει τη φόρτωση ολόκληρου του αρχείου σε μια μεγάλη συμβολοσειρά ταυτόχρονα.const inputBuffer = await streamFileToBuffer(tempCsvPath); -
Εκτέλεση Μετατροπής - Δημιουργείται ένα
ConvertDocumentRequestμεformat: 'xlsx'και το buffer CSV. Το SDK στέλνει τα δεδομένα στην υπηρεσία cloud, η οποία επιστρέφει ένα XLSXBuffer.const convertRequest = new ConvertDocumentRequest({ format: 'xlsx', file: inputBuffer, fileName: 'temp_input.csv' }); const conversionResult = await convertApi.convertDocument(convertRequest); -
Γράψτε XLSX στο Δίσκο - Το προκύπτον buffer γράφεται έξω με τη
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 για Node.JS μέσω npm:
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 εγκατεστημένο και τα διαπιστευτήρια έτοιμα, είστε έτοιμοι να εκτελέσετε το script μετατροπής.
Κύρια Σημεία
Η μετατροπή 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 γραμμή προς γραμμή και στέλνει το buffer στην υπηρεσία cloud, εξασφαλίζοντας ότι μόνο μικρά τμήματα παραμένουν στη μνήμη ανά πάσα στιγμή.
Υπάρχει τρόπος να αυτοματοποιηθεί η διαδικασία σε μια CI/CD pipeline;
Απόλυτα. Το ίδιο script Node.JS μπορεί να κληθεί από scripts κατασκευής, και οι εντολές cURL μπορούν να ενσωματωθούν σε βήματα κελύφους. Απλώς βεβαιωθείτε ότι οι μεταβλητές περιβάλλοντος ASPOSE_CLIENT_ID και ASPOSE_CLIENT_SECRET παρέχονται με ασφάλεια.