JSON to bardzo powszechny format danych, dlatego ważne jest, aby dowiedzieć się wszystkiego o tych typowych operacjach.
W Node.js można czytać i zapisywać pliki JSON. Wszystko, co musisz zrobić, to skorzystać z modułu fs zgodnie z opisem w naszym łatwym do zrozumienia przewodniku.
Odczyt i zapis plików JSON w Node.js
Format JavaScript Object Notation, popularnie znany jako JSON, to lekki format przesyłania danych, szeroko stosowany do reprezentowania danych strukturalnych. Jest to format tekstowy, który jest łatwy do czytania i pisania przez ludzi, a maszyny do analizowania i generowania.
Możliwość programowego odczytu i zapisu plików JSON w Node.js pozwala na wydajne i łatwe przechowywanie, wymianę i manipulowanie danymi strukturalnymi. Dowiedz się, jak czytać, zapisywać i aktualizować pliki JSON przy użyciu modułu systemu plików Node.js.
Moduł systemu plików Node.js
System plików Node.js (fs) jest wbudowany w Node.js. Umożliwia interakcję z systemem plików na urządzeniu. Można go używać między innymi do odczytywania zawartości pliku, tworzenia nowego pliku i usuwania pliku.
Metody oferowane przez fs moduł może być synchroniczny lub asynchroniczny. Metody synchroniczne blokują wykonanie programu do czasu zakończenia operacji na systemie plików. Metody te zwykle mają na końcu nazwy słowo „Synchronizacja”. Na przykład, czytajFileSync Lub napiszFileSync.
Z drugiej strony metody asynchroniczne nie blokują wykonywania programu i pozwalają mu kontynuować przetwarzanie innych zadań podczas wykonywania operacji na systemie plików. Metody te akceptują funkcję wywołania zwrotnego, która zostanie uruchomiona po zakończeniu operacji. Na przykład, przeczytaj plik Lub napisz plik.
Podczas interakcji z systemem plików należy zawsze używać metod asynchronicznych, aby zachować nieblokujący charakter pętli zdarzeń i poprawić wydajność i czas reakcji aplikacji.
Jednak metody synchroniczne mają swoje miejsce w niektórych scenariuszach, zwłaszcza gdy piszesz proste skrypty lub masz do czynienia z jednorazowymi operacjami na plikach.
Odczyt plików JSON za pomocą modułu fs
Aby odczytać plik JSON, najpierw zaimportuj plik asynchronous fs moduł do głównego pliku. Jak tak:
const fs = require("node: fs/promises");
Jeśli używasz wersji niższej niż Node.js wersja 18, zaimportuj fs moduł taki:
const fs = require("fs/promises");
Jeśli chcesz zaimportować cały moduł (synchroniczny i asynchroniczny), usuń plik /promises.
Możesz odczytać plik JSON za pomocą metody przeczytaj plik metoda, która przyjmuje dwa argumenty: ścieżkę pliku i opcjonalny obiekt konfiguracyjny. Argument config określa opcje odczytu pliku i może być obiektem z opcjami lub kodowaniem ciągu.
Opcje obiektu obejmują:
- kodowanie (strunowy, wartość domyślna to „utf8”): Ta opcja określa kodowanie znaków używane podczas odczytu pliku. Typowe kodowania obejmują „utf8” dla plików tekstowych i „binary” dla plików binarnych.
- flaga (strunowy, domyślnie jest to "r"): Ta opcja określa flagę systemu plików używaną podczas otwierania pliku. Typowe flagi obejmują „r” do czytania i „w” do pisania.
Na przykład:
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);
});
Ten kod odczytuje plik JSON o nazwie użytkownicy.json w bieżącym katalogu. Po pobraniu danych pliku możesz je przeanalizować z JSON do obiektu JavaScript za pomocą Analiza JSON. Umożliwia to dostęp do danych i manipulowanie nimi jako obiektem w kodzie.
W przypadku małych plików JSON możesz użyć wymagać aby czytać je synchronicznie. Ta metoda automatycznie analizuje pliki JSON w obiekty JavaScript. W przypadku większych plików JSON i w scenariuszach nieblokujących użyj fs.readFile aby czytać je asynchronicznie. Dodatkowo za pomocą wymagać buforuje również zawartość pliku w pamięci, więc może nie być idealnym rozwiązaniem, jeśli plik JSON często się zmienia.
Zapisywanie plików JSON za pomocą modułu fs
Możesz zapisywać dane w plikach JSON za pomocą metody napisz plik metoda. Metoda ta przyjmuje trzy argumenty:
- Ścieżka pliku.
- Dane, które chcesz zapisać do pliku, którymi mogą być ciąg znaków, bufor, plik AsyncIterowalna, Lub obiekt iterowalny.
- Opcjonalny obiekt konfiguracyjny.
Ta metoda asynchronicznie zapisuje dane do pliku. Jeśli plik istnieje, zastępuje istniejącą treść nową. Jeśli plik nie istnieje, tworzy go i wypełnia danymi przekazanymi jako argument.
Na przykład:
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);
});
Dane przekazywane do funkcji writeFile muszą być ciągiem znaków lub buforem, więc jeśli chcesz zapisać obiekt do pliku, musisz najpierw przekonwertować go na ciąg znaków za pomocą metody JSON.stringify metoda.
Aktualizowanie plików JSON za pomocą modułu fs
The fs moduł nie zapewnia jawnego sposobu aktualizacji plików, ponieważ zapisanie pliku zastępuje wszelkie istniejące dane.
Aby obejść ten problem, możesz zaktualizować plik, pobierając najpierw istniejącą zawartość z pliku za pomocą metody przeczytaj plik metoda. Następnie możesz dodać istniejące dane do bieżących danych i przekazać je jako argument danych w pliku napisz plik metoda.
Oto funkcja implementująca powyższą logikę:
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);
}
};
Funkcję możesz wywołać w następujący sposób:
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);
});
Ten blok kodu doda użytkowników z powyższymi informacjami do istniejących użytkownicy.json plik.
Względy bezpieczeństwa dotyczące odczytu i zapisu plików JSON
Ochrona aplikacji Node.js podczas odczytu i zapisu plików JSON wiąże się z kluczowymi kwestiami bezpieczeństwa. Zawsze powinieneś zweryfikować dane JSON, aby upewnić się, że są zgodne z Twoimi oczekiwaniami. Powinieneś także ograniczyć uprawnienia dostępu do plików i oczyścić dane wejściowe użytkownika, aby zapobiec potencjalnym podatnościom, takim jak wstrzykiwanie kodu.