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 sistema de arquivos Node.js (fs) é 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.

instagram viewer

Os métodos fornecidos pelo fs módulo pode ser síncrono ou assíncrono. 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, lerFileSync 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, arquivo lido ou escrever arquivo.

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 assíncrono fs módulo em seu arquivo principal. Igual a:

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

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

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

Caso queira importar o módulo inteiro (Síncrono e Assíncrono), remova o /promises.

Você pode ler um arquivo JSON usando o arquivo lido método 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 (corda, 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.
  • bandeira (corda, 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 usuários.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 pequenos arquivos JSON, você pode usar exigir 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, usando exigir também armazena em cache o conteúdo do arquivo na memória, portanto, pode não ser ideal se o seu arquivo JSON mudar muito.

Escrevendo arquivos JSON com o módulo fs

Você pode gravar dados em arquivos JSON usando o escrever arquivo método. 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 AsyncIterável, ou um objeto iterável.
  • 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 comando JSON.stringify método.

Atualizando arquivos JSON com o módulo fs

O fs O módulo 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 comando arquivo lido método. Então, você pode adicionar os dados existentes aos seus dados atuais e passá-los como seu argumento de dados no escrever arquivo método.

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 existente usuários.json arquivo.

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.