Aguarde...

10 de dezembro de 2023

Como ler e escrever arquivos JSON em Node.js

Como ler e escrever arquivos JSON em Node.js

JSON é um formato de dados muito comum, por isso é importante aprender tudo sobre essas operações comuns.

É possível ler e escrever arquivos JSON em Node.js. Tudo que você precisa fazer é utilizar o Módulo fs conforme detalhado em nosso guia fácil de seguir.

Lendo e gravando arquivos JSON em Node.js

O formato JavaScript Object Notation, popularmente conhecido como JSON, é um formato leve de transferência de dados amplamente utilizado para representar dados estruturados. É um formato baseado em texto que é fácil para os humanos lerem e escreverem e para as máquinas analisarem e gerarem.

A capacidade de ler e gravar arquivos JSON programaticamente em Node.js permite armazenar, trocar e manipular dados estruturados com eficiência e facilidade. Aprenda como ler, gravar e atualizar arquivos JSON usando o módulo do sistema de arquivos Node.js.

O módulo do sistema de arquivos Node.js

O módulo do sistema de arquivosfs ) do Node.js é integrado ao Node.js. Ele permite que você interaja com o sistema de arquivos do seu dispositivo. Você pode usá-lo para ler o conteúdo de um arquivo, criar um novo arquivo e excluir um arquivo, entre outras coisas.

Os métodos fornecidos pelo módulo fs podem ser síncronos ou assíncronos. Os métodos síncronos bloqueiam a execução do seu programa até que a operação do sistema de arquivos seja concluída. Esses métodos geralmente possuem “Sync” no final de seus nomes. Por exemplo, readFileSync ou writeFileSync .

Por outro lado, os métodos assíncronos não bloqueiam a execução do seu programa e permitem que ele continue processando outras tarefas enquanto a operação do sistema de arquivos está sendo executada. Esses métodos aceitam uma função de retorno de chamada que será executada quando a operação for concluída. Por exemplo, readFile ou writeFile .

Ao interagir com o sistema de arquivos, você deve sempre usar métodos assíncronos para manter a natureza sem bloqueio do loop de eventos e melhorar o desempenho e a capacidade de resposta do seu aplicativo.

No entanto, os métodos síncronos têm seu lugar em determinados cenários, especialmente quando você está escrevendo scripts simples ou lidando com operações únicas de arquivo.

Lendo arquivos JSON com o módulo fs

Para ler um arquivo JSON, primeiro importe o módulo fs assíncrono para o seu arquivo principal. Igual a:

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

Se você estiver usando uma versão inferior ao Node.js v18, importe o módulo fs assim:

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

Se você deseja importar o módulo inteiro (Síncrono e Assíncrono), remova o /promises .

Você pode ler um arquivo JSON usando o método readFile que recebe dois argumentos: um caminho de arquivo e um objeto de configuração opcional. O argumento config especifica opções para leitura do arquivo e pode ser um objeto com opções ou uma codificação de string.

As opções de objeto incluem:

  • codificação ( string , o padrão é “utf8”): Esta opção especifica a codificação de caracteres a ser usada ao ler o arquivo. As codificações comuns incluem “utf8” para arquivos de texto e “binary” para arquivos binários.
  • flag ( string , o padrão é “r”): Esta opção especifica o sinalizador do sistema de arquivos usado ao abrir o arquivo. Sinalizadores comuns incluem “r” para leitura e “w” para escrita.

Por exemplo:

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

Este código lê um arquivo JSON chamado users.json no diretório atual. Ao recuperar os dados do arquivo, você pode analisá-los de JSON em um objeto JavaScript usando JSON.parse . Isso permite acessar e manipular os dados como um objeto em seu código.

Para arquivos JSON pequenos, você pode usar require para lê-los de forma síncrona. Este método analisa automaticamente arquivos JSON em objetos JavaScript. Para arquivos JSON maiores e em cenários sem bloqueio, use fs.readFile para lê-los de forma assíncrona. Além disso, o uso de require também armazena em cache o conteúdo do arquivo na memória, portanto, pode não ser ideal se o arquivo JSON mudar muito.

Escrevendo arquivos JSON com o módulo fs

Você pode gravar dados em arquivos JSON usando o método writeFile . Este método leva três argumentos:

  • Um caminho de arquivo.
  • Os dados que você deseja gravar no arquivo, que podem ser uma string, um buffer, um AsyncIterable ou um objeto Iterable.
  • Um objeto de configuração opcional.

Este método grava dados de forma assíncrona em um arquivo. Se o arquivo existir, ele substituirá o conteúdo existente pelo novo conteúdo. Se o arquivo não existir, ele o cria e o preenche com os dados que você passa como argumento.

Por exemplo:

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

Os dados que você passa para a função writeFile devem ser uma string ou um buffer, portanto, se quiser gravar um objeto no arquivo, você deve primeiro convertê-lo em uma string usando o método JSON.stringify .

Atualizando arquivos JSON com o módulo fs

O módulo fs não fornece uma maneira explícita de atualizar arquivos, pois a gravação de um arquivo substitui quaisquer dados existentes.

Para contornar isso, você pode atualizar um arquivo obtendo primeiro o conteúdo existente do arquivo usando o método readFile . Em seguida, você pode adicionar os dados existentes aos dados atuais e passá-los como argumento de dados no método writeFile .

Aqui está uma função que implementa a lógica acima:

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

Você pode chamar a função assim:

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

Este bloco de código adicionará os usuários com as informações acima ao arquivo users.json existente .

Considerações de segurança para leitura e gravação de arquivos JSON

Proteger seu aplicativo Node.js ao ler e gravar arquivos JSON envolve considerações cruciais de segurança. Você deve sempre validar os dados JSON para garantir que estejam de acordo com suas expectativas. Você também deve restringir as permissões de acesso a arquivos e limpar a entrada do usuário para impedir vulnerabilidades potenciais, como injeção de código.

Postado em BlogTags:
Escreva um comentário