JSON is een veelgebruikt gegevensformaat, dus het is belangrijk om alles over deze veel voorkomende bewerkingen te leren.

Het is mogelijk om JSON-bestanden te lezen en te schrijven in Node.js. Het enige wat u hoeft te doen is de fs-module gebruiken, zoals beschreven in onze eenvoudig te volgen handleiding.

JSON-bestanden lezen en schrijven in Node.js

Het JavaScript Object Notation-formaat, in de volksmond bekend als JSON, is een lichtgewicht gegevensoverdrachtformaat dat veel wordt gebruikt voor het weergeven van gestructureerde gegevens. Het is een op tekst gebaseerd formaat dat gemakkelijk door mensen kan worden gelezen en geschreven, en door machines gemakkelijk kan worden geparseerd en gegenereerd.

Dankzij de mogelijkheid om JSON-bestanden in Node.js programmatisch te lezen en te schrijven, kunt u gestructureerde gegevens efficiënt en eenvoudig opslaan, uitwisselen en manipuleren. Leer hoe u JSON-bestanden leest, schrijft en bijwerkt met behulp van de Node.js-bestandssysteemmodule.

De Node.js-bestandssysteemmodule

instagram viewer

Het Node.js-bestandssysteem (fs) module is ingebouwd in Node.js. Hiermee kunt u communiceren met het bestandssysteem op uw apparaat. Je kunt er onder andere de inhoud van een bestand mee lezen, een nieuw bestand aanmaken en een bestand verwijderen.

De methoden die door de fs module kan beide zijn synchroon of asynchroon. Synchrone methoden blokkeren de uitvoering van uw programma totdat de werking van het bestandssysteem is voltooid. Deze methoden hebben meestal 'Sync' aan het einde van hun naam. Bijvoorbeeld, leesFileSync of schrijfFileSync.

Aan de andere kant blokkeren asynchrone methoden de uitvoering van uw programma niet en zorgen ervoor dat het andere taken kan blijven verwerken terwijl de bestandssysteembewerking wordt uitgevoerd. Deze methoden accepteren een callback-functie die wordt uitgevoerd wanneer de bewerking is voltooid. Bijvoorbeeld, leesBestand of schrijfBestand.

Bij interactie met het bestandssysteem moet u altijd asynchrone methoden gebruiken om het niet-blokkerende karakter van de gebeurtenislus te behouden en de prestaties en het reactievermogen van uw toepassing te verbeteren.

Synchrone methoden hebben echter hun plaats in bepaalde scenario's, vooral als u eenvoudige scripts schrijft of te maken heeft met eenmalige bestandsbewerkingen.

JSON-bestanden lezen met de fs-module

Om een ​​JSON-bestand te lezen, importeert u eerst het asynchroonbestand fs module in uw hoofdbestand. Zo:

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

Als u een versie lager dan Node.js v18, importeer de fs module zoals deze:

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

Als u de gehele module (Synchroon en Asynchroon) wilt importeren, verwijdert u de /promises.

U kunt een JSON-bestand lezen met behulp van de leesBestand methode waaraan twee argumenten moeten doorgegeven worden: een bestandspad en een optioneel configuratieobject. Het config-argument specificeert opties voor het lezen van het bestand en kan een object zijn met opties of een tekenreekscodering.

De objectopties omvatten:

  • codering (snaar, standaard is "utf8"): deze optie specificeert de tekencodering die moet worden gebruikt bij het lezen van het bestand. Veelgebruikte coderingen zijn onder meer "utf8" voor tekstbestanden en "binair" voor binaire bestanden.
  • vlag (snaar, standaard is "r"): deze optie specificeert de bestandssysteemvlag die wordt gebruikt bij het openen van het bestand. Veel voorkomende vlaggen zijn "r" voor lezen en "w" voor schrijven.

Bijvoorbeeld:

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

Deze code leest een JSON-bestand genaamd gebruikers.json in de huidige map. Wanneer u de gegevens van het bestand ophaalt, kunt u deze vanuit JSON in een JavaScript-object parseren met behulp van JSON.parse. Hierdoor kunt u de gegevens als object in uw code openen en manipuleren.

Voor kleine JSON-bestanden kunt u gebruiken vereisen om ze synchroon te lezen. Deze methode parseert JSON-bestanden automatisch in JavaScript-objecten. Gebruik voor grotere JSON-bestanden en in niet-blokkerende scenario's fs.readFile om ze asynchroon te lezen. Bovendien, gebruik vereisen slaat ook de bestandsinhoud in het geheugen op, dus het is misschien niet ideaal als uw JSON-bestand veel verandert.

JSON-bestanden schrijven met de fs-module

U kunt gegevens naar JSON-bestanden schrijven met behulp van de schrijfBestand methode. Deze methode heeft drie argumenten nodig:

  • Een bestandspad.
  • De gegevens die u naar het bestand wilt schrijven, dit kan een string, een buffer, een AsyncItereerbaar, of een Itereerbaar object.
  • Een optioneel configuratieobject.

Deze methode schrijft gegevens asynchroon naar een bestand. Als het bestand bestaat, overschrijft het de bestaande inhoud met de nieuwe inhoud. Als het bestand niet bestaat, wordt het aangemaakt en gevuld met de gegevens die u als argument doorgeeft.

Bijvoorbeeld:

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 gegevens die u doorgeeft aan de writeFile-functie moeten een string of een buffer zijn, dus als u een object naar het bestand wilt schrijven, moet u het eerst naar een string converteren met behulp van de JSON.stringify methode.

JSON-bestanden bijwerken met de fs-module

De fs module biedt geen expliciete manier om bestanden bij te werken, omdat het schrijven van een bestand alle bestaande gegevens overschrijft.

Om dit te omzeilen, kunt u een bestand bijwerken door eerst de bestaande inhoud uit het bestand op te halen met behulp van de leesBestand methode. Vervolgens kunt u de bestaande gegevens toevoegen aan uw huidige gegevens en deze doorgeven als uw gegevensargument in het schrijfBestand methode.

Hier is een functie die de bovenstaande logica implementeert:

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

Je kunt de functie als volgt aanroepen:

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

Dit codeblok voegt de gebruikers met de bovenstaande informatie toe aan de bestaande gebruikers.json bestand.

Beveiligingsoverwegingen bij het lezen en schrijven van JSON-bestanden

Het beveiligen van uw Node.js-applicatie bij het lezen en schrijven van JSON-bestanden brengt cruciale veiligheidsoverwegingen met zich mee. U moet de JSON-gegevens altijd valideren om ervoor te zorgen dat deze aan uw verwachtingen voldoen. U moet ook de toegangsrechten tot bestanden beperken en gebruikersinvoer opschonen om potentiële kwetsbaarheden zoals code-injectie te dwarsbomen.