JSON — очень распространенный формат данных, поэтому важно знать все об этих распространенных операциях.
В Node.js можно читать и записывать файлы JSON. Все, что вам нужно сделать, это использовать модуль fs, как подробно описано в нашем простом руководстве.
Чтение и запись файлов JSON в Node.js
Формат нотации объектов JavaScript, широко известный как JSON, представляет собой облегченный формат передачи данных, широко используемый для представления структурированных данных. Это текстовый формат, который легко читать и писать людям, а машинам — анализировать и генерировать.
Возможность программного чтения и записи файлов JSON в Node.js позволяет эффективно и легко хранить, обмениваться структурированными данными и манипулировать ими. Узнайте, как читать, записывать и обновлять файлы JSON с помощью модуля файловой системы Node.js.
Модуль файловой системы Node.js
Файловая система Node.js (фс) модуль встроен в Node.js. Он позволяет вам взаимодействовать с файловой системой вашего устройства. Вы можете использовать его, среди прочего, для чтения содержимого файла, создания нового файла и удаления файла.
Методы, предусмотренные фс модуль может быть либо синхронный или асинхронный. Синхронные методы блокируют выполнение вашей программы до завершения операции файловой системы. Эти методы обычно имеют слово «Sync» в конце названия. Например, чтениефайлесинк или записьфилесинк.
С другой стороны, асинхронные методы не блокируют выполнение вашей программы и позволяют ей продолжать обработку других задач, пока выполняется операция файловой системы. Эти методы принимают функцию обратного вызова, которая запустится после завершения операции. Например, прочитать файл или записьФайл.
При взаимодействии с файловой системой всегда следует использовать асинхронные методы, чтобы поддерживать неблокирующий характер цикла событий и повышать производительность и скорость реагирования вашего приложения.
Однако синхронные методы имеют свое место в определенных сценариях, особенно когда вы пишете простые сценарии или имеете дело с одноразовыми операциями с файлами.
Чтение файлов JSON с помощью модуля fs
Чтобы прочитать файл JSON, сначала импортируйте асинхронный фс модуль в ваш основной файл. Вот так:
const fs = require("node: fs/promises");
Если вы используете версию ниже, чем Node.js v18, импортируйте фс модуль такой:
const fs = require("fs/promises");
Если вы хотите импортировать весь модуль (синхронный и асинхронный), удалите /promises.
Вы можете прочитать файл JSON, используя прочитать файл метод, который принимает два аргумента: путь к файлу и необязательный объект конфигурации. Аргумент config указывает параметры чтения файла и может быть объектом с параметрами или строковой кодировкой.
Параметры объекта включают в себя:
- кодирование (нить, по умолчанию — «utf8»): этот параметр определяет кодировку символов, которая будет использоваться при чтении файла. Общие кодировки включают «utf8» для текстовых файлов и «двоичный» для двоичных файлов.
- флаг (нить, по умолчанию — «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 с именем пользователи.json в текущем каталоге. Когда вы получаете данные файла, вы можете проанализировать их из JSON в объект JavaScript, используя JSON.parse. Это позволяет вам получать доступ к данным и манипулировать ими как объектом вашего кода.
Для небольших файлов JSON вы можете использовать требовать читать их синхронно. Этот метод автоматически анализирует файлы JSON в объекты JavaScript. Для больших файлов JSON и в неблокирующих сценариях используйте фс.readFile читать их асинхронно. Кроме того, используя требовать также кэширует содержимое файла в памяти, поэтому это может быть не идеально, если ваш файл JSON сильно меняется.
Запись файлов JSON с помощью модуля fs
Вы можете записывать данные в файлы JSON, используя записьФайл метод. Этот метод принимает три аргумента:
- Путь к файлу.
- Данные, которые вы хотите записать в файл, который может быть строкой, буфером, AsyncIterable, или Итерируемый объект.
- Необязательный объект конфигурации.
Этот метод асинхронно записывает данные в файл. Если файл существует, он перезаписывает существующее содержимое новым. Если файл не существует, он создает его и заполняет данными, которые вы передаете в качестве аргумента.
Например:
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
фс Модуль не предоставляет явного способа обновления файлов, поскольку запись файла перезаписывает любые существующие данные.
Чтобы обойти эту проблему, вы можете обновить файл, сначала получив существующее содержимое из файла с помощью прочитать файл метод. Затем вы можете добавить существующие данные к текущим данным и передать их в качестве аргумента данных в записьФайл метод.
Вот функция, реализующая приведенную выше логику:
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);
});
Этот блок кода добавит пользователей с указанной выше информацией в существующие пользователи.json файл.
Вопросы безопасности при чтении и записи файлов JSON
Защита вашего приложения Node.js при чтении и записи файлов JSON требует принятия важных мер безопасности. Вам всегда следует проверять данные JSON, чтобы убедиться, что они соответствуют вашим ожиданиям. Вам также следует ограничить права доступа к файлам и очистить пользовательский ввод, чтобы предотвратить потенциальные уязвимости, такие как внедрение кода.