JSON je velmi běžný datový formát, takže je důležité naučit se vše o těchto běžných operacích.

V Node.js je možné číst a zapisovat soubory JSON. Vše, co musíte udělat, je použít modul fs, jak je podrobně popsáno v našem přehledném průvodci.

Čtení a zápis souborů JSON v Node.js

Formát JavaScript Object Notation, populárně známý jako JSON, je odlehčený formát pro přenos dat široce používaný pro reprezentaci strukturovaných dat. Jedná se o textový formát, který je pro lidi snadný ke čtení a zápisu a pro stroje k analýze a generování.

Schopnost programově číst a zapisovat soubory JSON v Node.js vám umožňuje ukládat, vyměňovat si a manipulovat se strukturovanými daty efektivně a snadno. Naučte se číst, zapisovat a aktualizovat soubory JSON pomocí modulu systému souborů Node.js.

Modul systému souborů Node.js

Systém souborů Node.js (fs) modul je zabudován do Node.js. Umožňuje vám komunikovat se systémem souborů na vašem zařízení. Můžete jej mimo jiné použít ke čtení obsahu souboru, vytvoření nového souboru a odstranění souboru.

instagram viewer

Metody poskytované fs modul může být buď synchronní nebo asynchronní. Synchronní metody blokují provádění vašeho programu, dokud není operace souborového systému dokončena. Tyto metody mají obvykle na konci názvu "Sync". Například, readFileSync nebo writeFileSync.

Na druhou stranu asynchronní metody neblokují provádění vašeho programu a umožňují mu pokračovat ve zpracování jiných úloh, zatímco je prováděna operace souborového systému. Tyto metody přijímají funkci zpětného volání, která se spustí po dokončení operace. Například, readFile nebo writeFile.

Při interakci se systémem souborů byste měli vždy používat asynchronní metody, abyste zachovali neblokující povahu smyčky událostí a zlepšili výkon a odezvu vaší aplikace.

Synchronní metody však mají své místo v určitých scénářích, zejména když píšete jednoduché skripty nebo se zabýváte jednorázovými operacemi se soubory.

Čtení souborů JSON pomocí modulu fs

Chcete-li číst soubor JSON, nejprve importujte asynchronní fs modulu do vašeho hlavního souboru. Jako tak:

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

Pokud používáte verzi nižší než Node.js v18, importovat fs modul takto:

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

Pokud chcete importovat celý modul (synchronní a asynchronní), odeberte /promises.

Soubor JSON můžete číst pomocí readFile metoda, která přebírá dva argumenty: cestu k souboru a volitelný konfigurační objekt. Argument config určuje volby pro čtení souboru a může to být objekt s volbami nebo kódování řetězce.

Možnosti objektu zahrnují:

  • kódování (tětiva, výchozí je "utf8"): Tato možnost určuje kódování znaků, které se má použít při čtení souboru. Mezi běžné kódování patří „utf8“ pro textové soubory a „binární“ pro binární soubory.
  • vlajka (tětiva, výchozí je "r"): Tato možnost určuje příznak systému souborů použitý při otevírání souboru. Mezi běžné příznaky patří „r“ pro čtení a „w“ pro zápis.

Napří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 čte soubor JSON s názvem users.json v aktuálním adresáři. Když načtete data souboru, můžete je analyzovat z JSON do objektu JavaScriptu pomocí JSON.parse. To vám umožňuje přistupovat k datům a manipulovat s nimi jako s objektem ve vašem kódu.

Pro malé soubory JSON můžete použít vyžadovat číst je synchronně. Tato metoda automaticky analyzuje soubory JSON do objektů JavaScriptu. Pro větší soubory JSON a v neblokujících scénářích použijte fs.readFile číst je asynchronně. Navíc pomocí vyžadovat také ukládá obsah souboru do paměti, takže nemusí být ideální, pokud se váš soubor JSON hodně změní.

Zápis souborů JSON pomocí modulu fs

Data můžete zapisovat do souborů JSON pomocí writeFile metoda. Tato metoda vyžaduje tři argumenty:

  • Cesta k souboru.
  • Data, která chcete zapsat do souboru, což může být řetězec, vyrovnávací paměť, an Asynclterablenebo Iterovatelný objekt.
  • Volitelný konfigurační objekt.

Tato metoda asynchronně zapisuje data do souboru. Pokud soubor existuje, přepíše stávající obsah novým obsahem. Pokud soubor neexistuje, vytvoří jej a naplní jej daty, která předáte jako argument.

Napří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);
});

Data, která předáte do funkce writeFile, musí být řetězec nebo vyrovnávací paměť, takže pokud chcete do souboru zapsat objekt, musíte jej nejprve převést na řetězec pomocí JSON.stringify metoda.

Aktualizace souborů JSON pomocí modulu fs

The fs modul neposkytuje explicitní způsob aktualizace souborů, protože zápis souboru přepíše jakákoli existující data.

Chcete-li to obejít, můžete soubor aktualizovat tak, že nejprve získáte existující obsah ze souboru pomocí souboru readFile metoda. Poté můžete přidat existující data ke svým aktuálním datům a předat je jako argument dat v souboru writeFile metoda.

Zde je funkce, která implementuje výše uvedenou 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);
}
};

Funkci můžete volat 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 přidá uživatele s výše uvedenými informacemi ke stávajícím users.json soubor.

Bezpečnostní aspekty pro čtení a zápis souborů JSON

Zabezpečení vaší aplikace Node.js při čtení a zápisu souborů JSON zahrnuje zásadní bezpečnostní aspekty. Data JSON byste měli vždy ověřit, abyste se ujistili, že odpovídají vašim očekáváním. Měli byste také omezit oprávnění k přístupu k souborům a dezinfikovat uživatelský vstup, abyste zabránili potenciálním zranitelnostem, jako je vkládání kódu.