JSON je vrlo čest format podataka, stoga je važno naučiti sve o tim uobičajenim operacijama.
Moguće je čitati i pisati JSON datoteke u Node.js. Sve što trebate učiniti je koristiti fs modul kao što je detaljno opisano u našem vodiču koji je jednostavan za praćenje.
Čitanje i pisanje JSON datoteka u Node.js
Format JavaScript Object Notation, popularno poznat kao JSON, lagani je format za prijenos podataka koji se široko koristi za predstavljanje strukturiranih podataka. To je tekstualni format koji je ljudima jednostavan za čitanje i pisanje, a strojevima za raščlanjivanje i generiranje.
Mogućnost programskog čitanja i pisanja JSON datoteka u Node.js omogućuje učinkovito i jednostavno pohranjivanje, razmjenu i manipuliranje strukturiranim podacima. Naučite kako čitati, pisati i ažurirati JSON datoteke pomoću modula datotečnog sustava Node.js.
Modul datotečnog sustava Node.js
Datotečni sustav Node.js (fs) modul je ugrađen u Node.js. Omogućuje vam interakciju s datotečnim sustavom na vašem uređaju. Možete ga koristiti za čitanje sadržaja datoteke, stvaranje nove datoteke i brisanje datoteke, između ostalog.
Metode koje pruža fs modul može biti sinkroni ili asinkroni. Sinkrone metode blokiraju izvođenje vašeg programa dok se operacija datotečnog sustava ne završi. Ove metode obično imaju "Sync" na kraju svojih naziva. Na primjer, readFileSync ili writeFileSync.
S druge strane, asinkrone metode ne blokiraju izvođenje vašeg programa i dopuštaju mu da nastavi s obradom drugih zadataka dok se izvršava operacija datotečnog sustava. Ove metode prihvaćaju funkciju povratnog poziva koja će se pokrenuti kada se operacija završi. Na primjer, readFile ili writeFile.
Prilikom interakcije s datotečnim sustavom uvijek biste trebali koristiti asinkrone metode kako biste održali neblokirajuću prirodu petlje događaja i poboljšali izvedbu i odziv vaše aplikacije.
Međutim, sinkrone metode imaju svoje mjesto u određenim scenarijima, osobito kada pišete jednostavne skripte ili se bavite jednokratnim operacijama datoteka.
Čitanje JSON datoteka s modulom fs
Za čitanje JSON datoteke prvo uvezite asinkroni fs modul u vašu glavnu datoteku. ovako:
const fs = require("node: fs/promises");
Ako koristite verziju nižu od Node.js v18, uvezite fs modul poput ovog:
const fs = require("fs/promises");
Ako želite uvesti cijeli modul (sinkroni i asinkroni), uklonite /promises.
JSON datoteku možete pročitati pomoću readFile metoda koja uzima dva argumenta: put datoteke i opcijski konfiguracijski objekt. Argument konfiguracije navodi opcije za čitanje datoteke i može biti objekt s opcijama ili kodiranje niza.
Opcije objekta uključuju:
- kodiranje (niz, zadano je "utf8"): Ova opcija određuje kodiranje znakova koje će se koristiti prilikom čitanja datoteke. Uobičajena kodiranja uključuju "utf8" za tekstualne datoteke i "binary" za binarne datoteke.
- zastava (niz, zadano je "r"): Ova opcija određuje oznaku datotečnog sustava koja se koristi prilikom otvaranja datoteke. Uobičajene oznake uključuju "r" za čitanje i "w" za pisanje.
Na primjer:
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);
});
Ovaj kod čita JSON datoteku tzv korisnici.json u trenutnom imeniku. Kada dohvatite podatke datoteke, možete ih analizirati iz JSON-a u JavaScript objekt pomoću JSON.parse. To vam omogućuje pristup i manipuliranje podacima kao objektom u vašem kodu.
Za male JSON datoteke možete koristiti zahtijevati čitati ih sinkrono. Ova metoda automatski analizira JSON datoteke u JavaScript objekte. Za veće JSON datoteke i u scenarijima bez blokiranja koristite fs.readFile čitati ih asinkrono. Dodatno, koristeći zahtijevati također sprema sadržaj datoteke u memoriju, tako da možda nije idealno ako se vaša JSON datoteka puno mijenja.
Pisanje JSON datoteka s modulom fs
Možete pisati podatke u JSON datoteke pomoću writeFile metoda. Ova metoda uzima tri argumenta:
- Put do datoteke.
- Podaci koje želite zapisati u datoteku, a to može biti niz, međuspremnik, an AsinkIterable, ili objekt koji se može ponoviti.
- Neobavezni konfiguracijski objekt.
Ova metoda asinkrono zapisuje podatke u datoteku. Ako datoteka postoji, ona prepisuje postojeći sadržaj novim sadržajem. Ako datoteka ne postoji, stvara je i popunjava podacima koje proslijedite kao argument.
Na primjer:
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);
});
Podaci koje prosljeđujete u funkciju writeFile moraju biti niz ili međuspremnik, pa ako želite zapisati objekt u datoteku, prvo ga morate pretvoriti u niz koristeći JSON.stringify metoda.
Ažuriranje JSON datoteka pomoću fs modula
The fs modul ne pruža eksplicitan način za ažuriranje datoteka, jer pisanje datoteke prepisuje sve postojeće podatke.
Da biste to zaobišli, možete ažurirati datoteku tako da prvo dobijete postojeći sadržaj iz datoteke pomoću readFile metoda. Zatim možete dodati postojeće podatke svojim trenutnim podacima i proslijediti ih kao argument podataka u writeFile metoda.
Evo funkcije koja implementira gornju logiku:
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);
}
};
Funkciju možete pozvati ovako:
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);
});
Ovaj blok koda će dodati korisnike s gore navedenim informacijama postojećim korisnici.json datoteka.
Sigurnosna razmatranja za čitanje i pisanje JSON datoteka
Zaštita vaše aplikacije Node.js prilikom čitanja i pisanja JSON datoteka uključuje ključna sigurnosna razmatranja. Uvijek biste trebali provjeriti JSON podatke kako biste bili sigurni da su u skladu s vašim očekivanjima. Također biste trebali ograničiti dopuštenja za pristup datotekama i dezinficirati korisnički unos kako biste spriječili potencijalne ranjivosti poput ubacivanja koda.