JSON е много често срещан формат на данни, така че е важно да научите всичко за тези общи операции.
Възможно е да се четат и записват JSON файлове в Node.js. Всичко, което трябва да направите, е да използвате модула fs, както е описано подробно в нашето лесно за следване ръководство.
Четене и писане на JSON файлове в Node.js
Форматът на JavaScript Object Notation, известен като JSON, е лек формат за прехвърляне на данни, широко използван за представяне на структурирани данни. Това е текстово базиран формат, който е лесен за четене и писане от хората и за машини за анализиране и генериране.
Възможността за програмно четене и запис на JSON файлове в Node.js ви позволява да съхранявате, обменяте и манипулирате структурирани данни ефективно и лесно. Научете как да четете, пишете и актуализирате JSON файлове с помощта на модула на файловата система Node.js.
Модулът на файловата система Node.js
Файловата система Node.js (fs) модулът е вграден в Node.js. Позволява ви да взаимодействате с файловата система на вашето устройство. Можете да го използвате, за да прочетете съдържанието на файл, да създадете нов файл и да изтриете файл, наред с други неща.
Методите, предоставени от fs модул може да бъде синхронен или асинхронен. Синхронните методи блокират изпълнението на вашата програма, докато операцията на файловата система не приключи. Тези методи обикновено имат "Sync" в края на имената си. Например, readFileSync или writeFileSync.
От друга страна, асинхронните методи не блокират изпълнението на вашата програма и й позволяват да продължи да обработва други задачи, докато се изпълнява операцията на файловата система. Тези методи приемат функция за обратно извикване, която ще се изпълни, когато операцията приключи. Например, readFile или writeFile.
Когато взаимодействате с файловата система, винаги трябва да използвате асинхронни методи, за да поддържате неблокиращия характер на цикъла на събития и да подобрите производителността и отзивчивостта на вашето приложение.
Синхронните методи обаче имат своето място в определени сценарии, особено когато пишете прости скриптове или се занимавате с еднократни файлови операции.
Четене на JSON файлове с модула fs
За да прочетете JSON файл, първо импортирайте асинхронния fs модул във вашия основен файл. Така:
const fs = require("node: fs/promises");
Ако използвате версия по-ниска от Node.js v18, импортирайте fs модул като този:
const fs = require("fs/promises");
Ако искате да импортирате целия модул (синхронен и асинхронен), премахнете /promises.
Можете да прочетете JSON файл, като използвате readFile метод, който приема два аргумента: път на файл и незадължителен конфигурационен обект. Аргументът config указва опции за четене на файла и може да бъде обект с опции или кодиране на низ.
Опциите на обекта включват:
- кодиране (низ, по подразбиране е "utf8"): Тази опция определя кодирането на знаци, което да се използва при четене на файла. Често срещаните кодировки включват "utf8" за текстови файлове и "binary" за двоични файлове.
- знаме (низ, по подразбиране е "r"): Тази опция указва флага на файловата система, използван при отваряне на файла. Общите флагове включват "r" за четене и "w" за писане.
Например:
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);
});
Този код чете JSON файл, наречен users.json в текущата директория. Когато извлечете данните от файла, можете да ги анализирате от JSON в JavaScript обект, като използвате JSON.parse. Това ви позволява да осъществявате достъп и да манипулирате данните като обект във вашия код.
За малки JSON файлове можете да използвате изискват да ги четат синхронно. Този метод автоматично анализира JSON файлове в JavaScript обекти. За по-големи JSON файлове и в неблокиращи сценарии използвайте fs.readFile да ги четат асинхронно. Освен това, използвайки изискват също кешира съдържанието на файла в паметта, така че може да не е идеално, ако вашият JSON файл се променя много.
Писане на JSON файлове с модула fs
Можете да записвате данни в JSON файлове, като използвате writeFile метод. Този метод приема три аргумента:
- Път на файл.
- Данните, които искате да запишете във файла, които могат да бъдат низ, буфер, an Асинхронизиран, или итерируем обект.
- Незадължителен конфигурационен обект.
Този метод асинхронно записва данни във файл. Ако файлът съществува, той презаписва съществуващото съдържание с новото съдържание. Ако файлът не съществува, той го създава и го попълва с данните, които предавате като аргумент.
Например:
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);
});
Данните, които подавате във функцията writeFile, трябва да бъдат низ или буфер, така че ако искате да запишете обект във файла, първо трябва да го конвертирате в низ, като използвате JSON.stringify метод.
Актуализиране на JSON файлове с модула fs
The fs модулът не предоставя изричен начин за актуализиране на файлове, тъй като писането на файл презаписва всички съществуващи данни.
За да заобиколите това, можете да актуализирате файл, като първо получите съществуващото съдържание от файла с помощта на readFile метод. След това можете да добавите съществуващите данни към текущите си данни и да ги предадете като аргумент за данните си в writeFile метод.
Ето функция, която прилага логиката по-горе:
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);
}
};
Можете да извикате функцията така:
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);
});
Този кодов блок ще добави потребителите с информацията по-горе към съществуващите users.json файл.
Съображения за сигурност при четене и писане на JSON файлове
Защитата на вашето приложение Node.js при четене и писане на JSON файлове включва важни съображения за сигурност. Винаги трябва да проверявате JSON данните, за да сте сигурни, че отговарят на вашите очаквания. Трябва също така да ограничите разрешенията за достъп до файлове и да дезинфекцирате въведеното от потребителите, за да предотвратите потенциални уязвимости като инжектиране на код.