JSON er et meget almindeligt dataformat, så det er vigtigt at lære alt om disse almindelige operationer.

Det er muligt at læse og skrive JSON-filer i Node.js. Alt du skal gøre er at bruge fs-modulet som beskrevet i vores letforståelige guide.

Læsning og skrivning af JSON-filer i Node.js

JavaScript Object Notation-formatet, populært kendt som JSON, er et let dataoverførselsformat, der i vid udstrækning bruges til at repræsentere strukturerede data. Det er et tekstbaseret format, der er nemt for mennesker at læse og skrive og for maskiner at parse og generere.

Evnen til programmatisk at læse og skrive JSON-filer i Node.js giver dig mulighed for at gemme, udveksle og manipulere strukturerede data effektivt og nemt. Lær, hvordan du læser, skriver og opdaterer JSON-filer ved hjælp af Node.js-filsystemmodulet.

Node.js filsystemmodulet

Node.js filsystemet (fs) modulet er indbygget i Node.js. Det lader dig interagere med filsystemet på din enhed. Du kan bruge den til blandt andet at læse indholdet af en fil, oprette en ny fil og slette en fil.

instagram viewer

De metoder, som fs modul kan enten være synkron eller asynkron. Synkrone metoder blokerer for eksekveringen af ​​dit program, indtil filsystemoperationen er fuldført. Disse metoder har normalt "Sync" i slutningen af ​​deres navne. For eksempel, readFileSync eller skriveFileSync.

På den anden side blokerer asynkrone metoder ikke udførelsen af ​​dit program og tillader det at fortsætte med at behandle andre opgaver, mens filsystemhandlingen udføres. Disse metoder accepterer en tilbagekaldsfunktion, der kører, når handlingen er fuldført. For eksempel, læs fil eller skriveFil.

Når du interagerer med filsystemet, bør du altid bruge asynkrone metoder til at opretholde den ikke-blokerende karakter af hændelsesløkken og forbedre din applikations ydeevne og reaktionsevne.

Synkrone metoder har dog deres plads i visse scenarier, især når du skriver simple scripts eller beskæftiger dig med engangsfiloperationer.

Læsning af JSON-filer med fs-modulet

For at læse en JSON-fil skal du først importere den asynkrone fs modul ind i din hovedfil. Ligesom:

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

Hvis du bruger en version lavere end Node.js v18, importere fs modul som dette:

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

Hvis du vil importere hele modulet (Synchronous og Asynchronous), skal du fjerne /promises.

Du kan læse en JSON-fil ved hjælp af læs fil metode, som tager to argumenter: en filsti og et valgfrit konfigurationsobjekt. Config-argumentet angiver muligheder for at læse filen og kan være et objekt med optioner eller en strengkodning.

Objektmulighederne omfatter:

  • indkodning (snor, standard er "utf8"): Denne indstilling angiver den tegnkodning, der skal bruges ved læsning af filen. Almindelige kodninger inkluderer "utf8" for tekstfiler og "binær" for binære filer.
  • flag (snor, standard er "r"): Denne indstilling specificerer filsystemflaget, der bruges ved åbning af filen. Fælles flag omfatter "r" til læsning og "w" til skrivning.

For eksempel:

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

Denne kode læser en JSON-fil kaldet users.json i den aktuelle mappe. Når du henter filens data, kan du parse dem fra JSON til et JavaScript-objekt ved hjælp af JSON.parse. Dette giver dig mulighed for at få adgang til og manipulere dataene som et objekt i din kode.

Til små JSON-filer kan du bruge kræve at læse dem synkront. Denne metode parser automatisk JSON-filer til JavaScript-objekter. For større JSON-filer og i ikke-blokerende scenarier, brug fs.readFile at læse dem asynkront. Derudover bruger kræve cacherer også filindholdet i hukommelsen, så det er måske ikke ideelt, hvis din JSON-fil ændrer sig meget.

Skrivning af JSON-filer med fs-modulet

Du kan skrive data til JSON-filer ved hjælp af skriveFil metode. Denne metode tager tre argumenter:

  • En filsti.
  • De data du vil skrive til filen, som kan være en streng, en buffer, en Asynkroniserbar, eller et gentagbart objekt.
  • Et valgfrit konfigurationsobjekt.

Denne metode skriver asynkront data til en fil. Hvis filen eksisterer, overskriver den det eksisterende indhold med det nye indhold. Hvis filen ikke eksisterer, opretter den den og udfylder den med de data, du sender som et argument.

For eksempel:

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

De data, du sender til funktionen writeFile, skal være en streng eller en buffer, så hvis du vil skrive et objekt til filen, skal du først konvertere det til en streng ved hjælp af JSON.stringify metode.

Opdatering af JSON-filer med fs-modulet

Det fs modul giver ikke en eksplicit måde at opdatere filer på, da skrivning af en fil overskriver eksisterende data.

For at omgå dette kan du opdatere en fil ved først at hente det eksisterende indhold fra filen ved hjælp af læs fil metode. Derefter kan du tilføje de eksisterende data til dine nuværende data og sende dem som dit dataargument i skriveFil metode.

Her er en funktion, der implementerer logikken ovenfor:

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 kalde funktionen sådan:

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

Denne kodeblok tilføjer brugerne med oplysningerne ovenfor til den eksisterende users.json fil.

Sikkerhedsovervejelser ved læsning og skrivning af JSON-filer

Beskyttelse af din Node.js-applikation, når du læser og skriver JSON-filer, involverer afgørende sikkerhedsovervejelser. Du bør altid validere JSON-dataene for at sikre, at de er i overensstemmelse med dine forventninger. Du bør også begrænse filadgangstilladelser og rense brugerinput for at forhindre potentielle sårbarheder som kodeinjektion.