Contents

Jak odczytywać i zapisywać pliki JSON w Node.js

Możliwe jest odczytywanie i zapisywanie plików JSON w Node.js. Wszystko, co musisz zrobić, to wykorzystać moduł fs, jak opisano w naszym łatwym do wykonania przewodniku.

Odczytywanie i zapisywanie plików JSON w Node.js

JavaScript Object Notation (JSON) to bardzo rozpowszechniony standard przesyłania danych, szczególnie znany ze swojej zdolności do reprezentowania zorganizowanych informacji w zwięzły sposób. Format ten, charakteryzujący się tekstowym charakterem, ułatwia zrozumienie przez ludzkich użytkowników, jednocześnie umożliwiając płynne analizowanie i generowanie przez systemy przetwarzania maszynowego.

Wykorzystanie możliwości automatycznego analizowania i generowania danych JSON w Node.js ułatwia wydajne i łatwe przechowywanie, przesyłanie i manipulowanie ustrukturyzowanymi informacjami. Zdobądź kompleksową wiedzę na temat czytania, komponowania i modyfikowania plików JSON poprzez wykorzystanie komponentu systemu plików Node.js.

Moduł systemu plików Node.js

Moduł systemu plików Node.js, który jest nieodłącznie wbudowany w środowisko Node.js, umożliwia użytkownikom komunikację z systemem plików urządzenia poprzez różne funkcje, takie jak między innymi odczytywanie plików, tworzenie nowych i usuwanie ich.

Funkcjonalności oferowane przez moduł systemu plików są dostępne w dwóch różnych trybach; mogą działać asynchronicznie lub synchronicznie. Operacje asynchroniczne nie utrudniają postępu aplikacji, ponieważ pozwalają na przetwarzanie współbieżne z innymi zadaniami. Metody, które podążają za tym wzorcem, zazwyczaj noszą nazwę oznaczającą ich asynchroniczny charakter. Na przykład, można znaleźć oznaczenia takie jak “Async” lub “await” dołączone do nazwy metody, np. readFileAsync lub writeFileAsync .

Podczas gdy metody synchroniczne zawieszają wykonywanie programu do czasu zakończenia operacji systemu plików, metody asynchroniczne pozwalają programowi na jednoczesne wykonywanie innych zadań poprzez wykorzystanie funkcji zwrotnej, która jest wykonywana po zakończeniu operacji. Ilustrujące przykłady obejmują funkcje readFile i writeFile.

Aby zachować nieblokującą charakterystykę pętli zdarzeń i zwiększyć ogólną wydajność i szybkość aplikacji podczas pracy z plikami, konieczne jest wykorzystanie technik asynchronicznych we wszystkich interakcjach z systemem plików.

W szczególnych przypadkach, gdy prostota jest najważniejsza, a operacje są rzadkie, takie jak podstawowe zadania skryptowe lub jednorazowe manipulacje plikami, podejścia asynchroniczne mogą nie być konieczne, a techniki synchroniczne mogą okazać się skutecznym rozwiązaniem.

Odczytywanie plików JSON za pomocą modułu fs

Aby przetworzyć plik JSON przy użyciu asynchronicznego JavaScript, konieczne jest zaimportowanie asynchronicznego modułu systemu plików do głównego pliku skryptu. Można to osiągnąć poprzez dołączenie instrukcji importu na początku pliku, jak pokazano poniżej:

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

W przypadku korzystania z wersji Node.js wcześniejszej niż 18, należy zaimportować moduł fs w następujący sposób:

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

Jeśli chcemy zaimportować kompletny moduł, w tym zarówno komponenty synchroniczne, jak i asynchroniczne, konieczne jest pominięcie “/promises” w instrukcji importu.

Wykorzystując funkcję readFile , można przeglądać zawartość pliku JSON, podając jako parametry zarówno ścieżkę do katalogu, jak i opcjonalny obiekt konfiguracyjny. Ten obiekt konfiguracyjny może być obiektem JavaScript zawierającym różne preferencje odczytu lub ciągiem enkapsulującym z góry określony schemat kodowania.

Opcje obiektu obejmują:

Określony parametr określa zestaw znaków używany podczas procesu przeglądania określonego dokumentu, przy czym standardowa konfiguracja to “utf8”, który jest zwykle używany do treści tekstowych i “binarny”, który ma zastosowanie do nietekstowych plików danych.

Symbol gwiazdki (*), po którym następuje nawias, zamknięty w nawiasach klamrowych ({}), wskazuje opcjonalny argument, który domyślnie przyjmuje wartość “r”, co oznacza tryb odczytu podczas otwierania pliku w określonym systemie plików. Inne popularne tryby dostępu do plików obejmują “w” dla trybu tylko do zapisu i “a” dla trybu dołączania.

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

Dzisiejsza aplikacja została zaprojektowana do przetwarzania informacji przechowywanych w pliku o nazwie “users.json”, który znajduje się w bezpośrednim sąsiedztwie punktu wykonania oprogramowania. Aby wyodrębnić zawartość tego konkretnego pliku, można wykorzystać wbudowaną funkcjonalność zapewnianą przez stosowany język programowania. W szczególności metoda znana jako “JSON.parse” może zostać wywołana na pobranych danych w celu przekonwertowania ich na obiekt JavaScript. W ten sposób użytkownik zyskuje możliwość interakcji i modyfikowania zawartych w nich informacji, a wszystko to w ramach swojej bazy kodu.

W przypadku mniejszych plików JSON można użyć funkcji require do synchronicznego analizowania takich plików i konwertowania ich zawartości na obiekty JavaScript. Jednak w przypadku bardziej znaczących plików JSON lub podczas pracy w kontekście asynchronicznym zaleca się zamiast tego zastosowanie metody fs.readFile .Należy zauważyć, że podejście require może potencjalnie buforować całą zawartość pliku w pamięci, co może powodować trudności w przypadku częstych zmian danych JSON.

Zapisywanie plików JSON za pomocą modułu fs

Funkcja writeFile umożliwia tworzenie i zapisywanie danych w formacie JSON poprzez przekazanie jej trzech parametrów, a mianowicie ścieżki pliku, danych do zapisania i opcjonalnej funkcji zwrotnej.

⭐Ścieżka pliku.

Informacje przeznaczone do przechowywania w pliku mogą przybierać różne formy, takie jak ciąg znaków, bufor, asynchroniczna iterowalna lub iterowalny obiekt.

⭐Opcjonalny obiekt konfiguracyjny.

To szczególne podejście wykorzystuje operacje asynchroniczne w celu zapisu danych do określonego pliku. W przypadkach, gdy wspomniany plik już istnieje, jego bieżąca zawartość zostanie zastąpiona dostarczonymi danymi, skutecznie zastępując wszelkie poprzednie informacje, które mogły być w nim przechowywane. I odwrotnie, w przypadkach, gdy plik jeszcze nie istnieje, technika ta utworzy go, a następnie wypełni danymi przekazanymi jako dane wejściowe, zapewniając w ten sposób, że wszystkie niezbędne informacje zostaną pomyślnie zapisane w wyznaczonym miejscu przechowywania.

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

ciąg lub bufor. Jeśli ktoś chce zapisać obiekt we wspomnianym pliku, konieczne staje się przekształcenie go w ciąg znaków poprzez wcześniejsze wykorzystanie metody JSON.stringify.

Aktualizacja plików JSON za pomocą modułu fs

Dostarczony kod nie oferuje bezpośredniej metody modyfikacji plików, ponieważ zapis do pliku usuwa jego poprzednią zawartość.

Aby sprostać temu wyzwaniu, jednym z podejść jest pobranie istniejącej zawartości pliku przy użyciu funkcji readFile . Następnie można połączyć zaktualizowane dane z pobranymi informacjami i dostarczyć oba zestawy danych jako dane wejściowe dla operacji writeFile .

Oczywiście, oto przykład funkcji w Pythonie, która ucieleśnia opisaną 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żna 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 fragment kodu dołączy szczegóły wspomnianych użytkowników do istniejącego pliku JSON o nazwie “users.json”.

Uwagi dotyczące bezpieczeństwa odczytu i zapisu plików JSON

Zapewnienie bezpieczeństwa aplikacji Node.js obsługującej pliki JSON jest najważniejsze, ponieważ takie działania obejmują krytyczne aspekty ochrony.Niezbędne jest zweryfikowanie poprawności danych JSON w celu zagwarantowania zgodności z wcześniej zdefiniowanymi specyfikacjami. Dodatkowo, ograniczenie uprawnień dostępu do plików i czyszczenie danych wejściowych użytkownika to skuteczne środki przeciwko potencjalnym zagrożeniom, takim jak ataki typu code injection.