JSON je veľmi bežný dátový formát, takže je dôležité naučiť sa všetko o týchto bežných operáciách.

V Node.js je možné čítať a zapisovať súbory JSON. Všetko, čo musíte urobiť, je použiť modul fs, ako je podrobne uvedené v našom prehľadnom sprievodcovi.

Čítanie a zápis súborov JSON v Node.js

Formát JavaScript Object Notation, všeobecne známy ako JSON, je ľahký formát prenosu údajov, ktorý sa bežne používa na reprezentáciu štruktúrovaných údajov. Je to textový formát, ktorý ľudia ľahko čítajú a píšu a stroje ho analyzujú a generujú.

Schopnosť programovo čítať a zapisovať súbory JSON v Node.js vám umožňuje ukladať, vymieňať si a manipulovať so štruktúrovanými údajmi efektívne a jednoducho. Zistite, ako čítať, zapisovať a aktualizovať súbory JSON pomocou modulu systému súborov Node.js.

Modul systému súborov Node.js

Systém súborov Node.js (fs) modul je zabudovaný do Node.js. Umožňuje vám komunikovať so systémom súborov vo vašom zariadení. Môžete ho použiť okrem iného na čítanie obsahu súboru, vytvorenie nového súboru a odstránenie súboru.

instagram viewer

Metódy, ktoré poskytuje fs modul môže byť buď synchrónne alebo asynchrónne. Synchrónne metódy blokujú spustenie vášho programu, kým sa operácia súborového systému nedokončí. Tieto metódy majú zvyčajne na konci svojho názvu "Sync". Napríklad, readFileSync alebo writeFileSync.

Na druhej strane asynchrónne metódy neblokujú vykonávanie vášho programu a umožňujú mu pokračovať v spracovaní iných úloh, kým sa vykonáva operácia súborového systému. Tieto metódy akceptujú funkciu spätného volania, ktorá sa spustí po dokončení operácie. Napríklad, readFile alebo writeFile.

Pri interakcii so súborovým systémom by ste mali vždy používať asynchrónne metódy, aby ste zachovali neblokujúci charakter slučky udalostí a zlepšili výkon a odozvu vašej aplikácie.

Synchrónne metódy však majú svoje miesto v určitých scenároch, najmä keď píšete jednoduché skripty alebo sa zaoberáte jednorazovými operáciami so súbormi.

Čítanie súborov JSON pomocou modulu fs

Ak chcete čítať súbor JSON, najprv importujte asynchrónny súbor fs modul do vášho hlavného súboru. Ako:

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

Ak používate verziu nižšiu ako Node.js v18, importovať fs modul takto:

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

Ak chcete importovať celý modul (synchrónny a asynchrónny), odstráňte súbor /promises.

Súbor JSON si môžete prečítať pomocou readFile metóda, ktorá má dva argumenty: cestu k súboru a voliteľný konfiguračný objekt. Argument config špecifikuje voľby pre čítanie súboru a môže to byť objekt s voľbami alebo kódovaním reťazca.

Možnosti objektu zahŕňajú:

  • kódovanie (reťazec, predvolená hodnota je "utf8"): Táto možnosť určuje kódovanie znakov, ktoré sa má použiť pri čítaní súboru. Bežné kódovania zahŕňajú „utf8“ pre textové súbory a „binárne“ pre binárne súbory.
  • vlajka (reťazec, predvolená hodnota je "r"): Táto možnosť určuje príznak systému súborov, ktorý sa používa pri otváraní súboru. Medzi bežné príznaky patrí „r“ pre čítanie a „w“ pre zápis.

Napríklad:

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

Tento kód číta súbor JSON s názvom users.json v aktuálnom adresári. Keď načítate údaje súboru, môžete ich analyzovať z JSON do objektu JavaScript pomocou JSON.parse. To vám umožňuje pristupovať a manipulovať s údajmi ako s objektom vo vašom kóde.

Pre malé súbory JSON môžete použiť vyžadovať čítať ich synchrónne. Táto metóda automaticky analyzuje súbory JSON do objektov JavaScript. Pre väčšie súbory JSON a v scenároch bez blokovania použite fs.readFile čítať ich asynchrónne. Okrem toho pomocou vyžadovať tiež ukladá obsah súboru do pamäte cache, takže nemusí byť ideálne, ak sa váš súbor JSON veľmi zmení.

Zápis súborov JSON pomocou modulu fs

Údaje môžete zapisovať do súborov JSON pomocou writeFile metóda. Táto metóda má tri argumenty:

  • Cesta k súboru.
  • Údaje, ktoré chcete zapísať do súboru, čo môže byť reťazec, vyrovnávacia pamäť, an AsyncIterable, alebo Iterovateľný objekt.
  • Voliteľný konfiguračný objekt.

Táto metóda asynchrónne zapisuje údaje do súboru. Ak súbor existuje, prepíše existujúci obsah novým obsahom. Ak súbor neexistuje, vytvorí ho a naplní ho údajmi, ktoré zadáte ako argument.

Napríklad:

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

Údaje, ktoré odošlete do funkcie writeFile, musia byť reťazec alebo vyrovnávacia pamäť, takže ak chcete do súboru zapísať objekt, musíte ho najprv previesť na reťazec pomocou JSON.stringify metóda.

Aktualizácia súborov JSON pomocou modulu fs

The fs modul neposkytuje explicitný spôsob aktualizácie súborov, pretože zápis súboru prepíše všetky existujúce údaje.

Ak to chcete obísť, môžete aktualizovať súbor tak, že najprv získate existujúci obsah zo súboru pomocou súboru readFile metóda. Potom môžete pridať existujúce údaje k svojim aktuálnym údajom a odovzdať ich ako argument údajov v writeFile metóda.

Tu je funkcia, ktorá implementuje vyššie uvedenú 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);
}
};

Funkciu môžete zavolať takto:

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

Tento blok kódu pridá používateľov s vyššie uvedenými informáciami k existujúcim users.json súbor.

Bezpečnostné aspekty čítania a zápisu súborov JSON

Zabezpečenie vašej aplikácie Node.js pri čítaní a zápise súborov JSON zahŕňa zásadné bezpečnostné aspekty. Údaje JSON by ste mali vždy overiť, aby ste sa uistili, že sú v súlade s vašimi očakávaniami. Mali by ste tiež obmedziť povolenia na prístup k súborom a dezinfikovať vstup používateľa, aby ste zabránili potenciálnym zraniteľnostiam, ako je napríklad vkladanie kódu.