JSON är ett mycket vanligt dataformat, så det är viktigt att lära sig allt om dessa vanliga operationer.

Det är möjligt att läsa och skriva JSON-filer i Node.js. Allt du behöver göra är att använda fs-modulen som beskrivs i vår lättanvända guide.

Läsa och skriva JSON-filer i Node.js

JavaScript Object Notation-formatet, populärt känt som JSON, är ett lätt dataöverföringsformat som ofta används för att representera strukturerad data. Det är ett textbaserat format som är lätt för människor att läsa och skriva och för maskiner att analysera och generera.

Möjligheten att programmatiskt läsa och skriva JSON-filer i Node.js gör att du kan lagra, utbyta och manipulera strukturerad data effektivt och enkelt. Lär dig hur du läser, skriver och uppdaterar JSON-filer med hjälp av filsystemmodulen Node.js.

Filsystemmodulen Node.js

Filsystemet Node.js (fs)-modulen är inbyggd i Node.js. Det låter dig interagera med filsystemet på din enhet. Du kan använda den för att läsa innehållet i en fil, skapa en ny fil och radera en fil, bland annat.

instagram viewer

Metoderna som tillhandahålls av fs modul kan antingen vara synkron eller asynkron. Synkrona metoder blockerar körningen av ditt program tills filsystemets operation är klar. Dessa metoder har vanligtvis "Sync" i slutet av sina namn. Till exempel, readFileSync eller writeFileSync.

Å andra sidan blockerar inte asynkrona metoder exekveringen av ditt program och tillåter det att fortsätta bearbeta andra uppgifter medan filsystemoperationen utförs. Dessa metoder accepterar en återuppringningsfunktion som körs när operationen är klar. Till exempel, läsfil eller skrivFil.

När du interagerar med filsystemet bör du alltid använda asynkrona metoder för att bibehålla händelseslingans icke-blockerande karaktär och förbättra din applikations prestanda och lyhördhet.

Synkrona metoder har dock sin plats i vissa scenarier, särskilt när du skriver enkla skript eller hanterar engångsfiloperationer.

Läsa JSON-filer med fs-modulen

För att läsa en JSON-fil, importera först den asynkrona fs modulen till din huvudfil. Såhär:

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

Om du använder en lägre version än Node.js v18, importera fs modul så här:

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

Om du vill importera hela modulen (Synchronous och Asynchronous), ta bort /promises.

Du kan läsa en JSON-fil med hjälp av läsfil metod som tar två argument: en filsökväg och ett valfritt konfigurationsobjekt. Argumentet config anger alternativ för att läsa filen och kan vara ett objekt med alternativ eller en strängkodning.

Objektalternativen inkluderar:

  • kodning (sträng, standard är "utf8"): Det här alternativet anger teckenkodningen som ska användas vid läsning av filen. Vanliga kodningar inkluderar "utf8" för textfiler och "binär" för binära filer.
  • flagga (sträng, standard är "r"): Det här alternativet anger filsystemflaggan som används när filen öppnas. Vanliga flaggor inkluderar "r" för läsning och "w" för att skriva.

Till exempel:

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);
});

Denna kod läser en JSON-fil som heter users.json i den aktuella katalogen. När du hämtar filens data kan du analysera den från JSON till ett JavaScript-objekt med hjälp av JSON.parse. Detta låter dig komma åt och manipulera data som ett objekt i din kod.

För små JSON-filer kan du använda behöva att läsa dem synkront. Den här metoden analyserar automatiskt JSON-filer till JavaScript-objekt. För större JSON-filer och i icke-blockerande scenarier, använd fs.readFile att läsa dem asynkront. Dessutom använder man behöva cachar också filinnehållet i minnet, så det kanske inte är idealiskt om din JSON-fil ändras mycket.

Skriva JSON-filer med fs-modulen

Du kan skriva data till JSON-filer med hjälp av skrivFil metod. Denna metod tar tre argument:

  • En filsökväg.
  • Datan du vill skriva till filen, som kan vara en sträng, en buffert, en Asynkroniserad, eller ett Iterable objekt.
  • Ett valfritt konfigurationsobjekt.

Denna metod skriver asynkront data till en fil. Om filen finns skriver den över det befintliga innehållet med det nya innehållet. Om filen inte finns skapar den den och fyller i den med data du skickar som argument.

Till exempel:

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);
});

Datan du skickar till funktionen writeFile måste vara en sträng eller en buffert, så om du vill skriva ett objekt till filen måste du först konvertera det till en sträng med hjälp av JSON.stringify metod.

Uppdatera JSON-filer med fs-modulen

De fs Modulen tillhandahåller inte ett explicit sätt att uppdatera filer, eftersom att skriva en fil skriver över befintliga data.

För att kringgå detta kan du uppdatera en fil genom att först hämta det befintliga innehållet från filen med hjälp av läsfil metod. Sedan kan du lägga till befintlig data till din nuvarande data och skicka den som ditt dataargument i skrivFil metod.

Här är en funktion som implementerar logiken ovan:

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);
}
};

Du kan anropa funktionen så här:

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);
});

Detta kodblock kommer att lägga till användarna med informationen ovan till den befintliga users.json fil.

Säkerhetsöverväganden för att läsa och skriva JSON-filer

Att skydda din Node.js-applikation när du läser och skriver JSON-filer involverar avgörande säkerhetsöverväganden. Du bör alltid validera JSON-data för att säkerställa att den överensstämmer med dina förväntningar. Du bör också begränsa filåtkomstbehörigheter och rensa användarinmatning för att motverka potentiella sårbarheter som kodinjektion.