JSON è un formato dati molto comune, quindi è importante imparare tutto su queste operazioni comuni.

È possibile leggere e scrivere file JSON in Node.js. Tutto quello che devi fare è utilizzare il modulo fs come dettagliato nella nostra guida facile da seguire.

Lettura e scrittura di file JSON in Node.js

Il formato JavaScript Object Notation, popolarmente noto come JSON, è un formato leggero di trasferimento dati ampiamente utilizzato per rappresentare dati strutturati. È un formato basato su testo che è facile da leggere e scrivere per gli esseri umani e per le macchine da analizzare e generare.

La capacità di leggere e scrivere a livello di codice file JSON in Node.js consente di archiviare, scambiare e manipolare dati strutturati in modo efficiente e semplice. Scopri come leggere, scrivere e aggiornare i file JSON utilizzando il modulo del file system Node.js.

Il modulo del file system Node.js

Il file system Node.js (fs) è integrato in Node.js. Ti consente di interagire con il file system del tuo dispositivo. Puoi usarlo per leggere il contenuto di un file, creare un nuovo file ed eliminare un file, tra le altre cose.

instagram viewer

Le modalità previste dall' fs il modulo può essere sincrona o asincrona. I metodi sincroni bloccano l'esecuzione del programma fino al completamento dell'operazione del file system. Questi metodi solitamente hanno la parola "Sync" alla fine del nome. Per esempio, leggereFileSync O scrivereFileSync.

D'altra parte, i metodi asincroni non bloccano l'esecuzione del programma e gli consentono di continuare a elaborare altre attività mentre viene eseguita l'operazione del file system. Questi metodi accettano una funzione di callback che verrà eseguita al termine dell'operazione. Per esempio, leggiFile O writeFile.

Quando interagisci con il file system, dovresti sempre utilizzare metodi asincroni per mantenere la natura non bloccante del ciclo di eventi e migliorare le prestazioni e la reattività della tua applicazione.

Tuttavia, i metodi sincroni hanno il loro posto in determinati scenari, soprattutto quando si scrivono script semplici o si gestiscono operazioni sui file una tantum.

Lettura di file JSON con il modulo fs

Per leggere un file JSON, importa prima il file asynchronous fs module nel file principale. Così:

const fs = require("node: fs/promises");

Se stai utilizzando una versione inferiore a Node.js v18, importa il fs modulo in questo modo:

const fs = require("fs/promises");

Se vuoi importare l'intero modulo (sincrono e asincrono), rimuovi il file /promises.

Puoi leggere un file JSON utilizzando il file leggiFile metodo che accetta due argomenti: un percorso di file e un oggetto di configurazione opzionale. L'argomento config specifica le opzioni per leggere il file e può essere un oggetto con opzioni o una codifica di stringa.

Le opzioni dell'oggetto includono:

  • codifica (corda, il valore predefinito è "utf8"): questa opzione specifica la codifica dei caratteri da utilizzare durante la lettura del file. Le codifiche comuni includono "utf8" per file di testo e "binary" per file binari.
  • bandiera (corda, il valore predefinito è "r"): questa opzione specifica il flag del file system utilizzato durante l'apertura del file. I flag comuni includono "r" per leggere e "w" per scrivere.

Per esempio:

fs.readFile("./users.json", { encoding: "utf-8", flag: "r" })
.then((data) => {
const users = JSON.parse(data);
console.log(users);
})
.catch((error) => {
console.error('Error reading the JSON file:', error);
});

Questo codice legge un file JSON chiamato utenti.json nella directory corrente. Quando recuperi i dati del file, puoi analizzarli da JSON in un oggetto JavaScript utilizzando JSON.parse. Ciò ti consente di accedere e manipolare i dati come oggetto nel tuo codice.

Per i file JSON di piccole dimensioni, è possibile utilizzare richiedere per leggerli in modo sincrono. Questo metodo analizza automaticamente i file JSON in oggetti JavaScript. Per file JSON di dimensioni maggiori e in scenari non bloccanti, utilizzare fs.readFile per leggerli in modo asincrono. Inoltre, utilizzando richiedere memorizza anche nella cache il contenuto del file in memoria, quindi potrebbe non essere l'ideale se il tuo file JSON cambia molto.

Scrittura di file JSON con il modulo fs

È possibile scrivere dati su file JSON utilizzando il file writeFile metodo. Questo metodo accetta tre argomenti:

  • Un percorso di file.
  • I dati che vuoi scrivere nel file, che possono essere una stringa, un buffer, un file Asincronizzabile, O un oggetto Iterable.
  • Un oggetto di configurazione facoltativo.

Questo metodo scrive i dati in modo asincrono in un file. Se il file esiste, sovrascrive il contenuto esistente con il nuovo contenuto. Se il file non esiste, lo crea e lo popola con i dati che passi come argomento.

Per esempio:

const fakeUsers = [
{
id: 1,
name: "John Doe",
username: "johndoe123",
address: {
street: "123 Main St",
city: "Anytown",
},
},
{
id: 2,
name: "Jane Smith",
username: "janesmith456",
address: {
street: "456 Elm St",
city: "Another City",
},
}
];

fs.writeFile("./users.json", JSON.stringify(fakeUsers), {
encoding: "utf-8",
flag: "w",
}).catch((error) => {
console.error('Error writing the JSON file:', error);
});

I dati che passi alla funzione writeFile devono essere una stringa o un buffer, quindi se vuoi scrivere un oggetto nel file, devi prima convertirlo in una stringa usando il comando JSON.stringify metodo.

Aggiornamento dei file JSON con il modulo fs

IL fs Il modulo non fornisce un modo esplicito per aggiornare i file, poiché la scrittura di un file sovrascrive tutti i dati esistenti.

Per risolvere questo problema, puoi aggiornare un file ottenendo prima il contenuto esistente dal file utilizzando il file leggiFile metodo. Quindi, puoi aggiungere i dati esistenti ai tuoi dati correnti e passarli come argomento dei dati nel file writeFile metodo.

Ecco una funzione che implementa la logica di cui sopra:

const updateFile = async (filePath, data) => {
try {
const fileContents = await fs.readFile(filePath, {
encoding: "utf-8",
flag: "r",
});

const fileData = JSON.parse(fileContents);

const updatedFileData = [...fileData, ...data];

await fs.writeFile(filePath, JSON.stringify(updatedFileData), {
encoding: "utf-8",
flag: "w",
});

return"File updated successfully";
} catch (error) {
console.error('Error updating the JSON file:', error);
}
};

Puoi chiamare la funzione in questo modo:

updateFile("./users.json", [
{
id: 4,
name: "Jane Doe",
username: "janedoe123",
address: {
street: "123 Main St",
city: "Anytown",
},
},
{
id: 5,
name: "John Smith",
username: "johnsmith456",
address: {
street: "456 Elm St",
city: "Another City",
},
}
]).then((message) => {
console.log(message);
});

Questo blocco di codice aggiungerà gli utenti con le informazioni di cui sopra a quelli esistenti utenti.json file.

Considerazioni sulla sicurezza per la lettura e la scrittura di file JSON

La protezione dell'applicazione Node.js durante la lettura e la scrittura di file JSON comporta considerazioni di sicurezza cruciali. Dovresti sempre convalidare i dati JSON per assicurarti che siano conformi alle tue aspettative. Dovresti anche limitare le autorizzazioni di accesso ai file e disinfettare l'input dell'utente per contrastare potenziali vulnerabilità come l'iniezione di codice.