Trabalhando com JSON no Node.js: do básico às técnicas avançadas
JSON (JavaScript Object Notation) é um formato leve de troca de dados que se tornou o padrão de facto para APIs web e arquivos de configuração. No Node.js, o trabalho com JSON é integrado ao núcleo, tornando seu processamento rápido e conveniente. Neste artigo, abordaremos todos os aspectos do trabalho com JSON: desde o parsing básico até o processamento de arquivos grandes usando streams.
Fundamentos: JSON.parse() e JSON.stringify()
Dois métodos globais — JSON.parse() e JSON.stringify() — são a base de todo o trabalho com JSON em JavaScript.
JSON.parse() — convertendo string em objeto
O método JSON.parse() recebe uma string no formato JSON e retorna o objeto JavaScript correspondente. Se a string contiver um erro de sintaxe, uma exceção SyntaxError será lançada.
const jsonString = '{"name": "Ana", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);
console.log(user.name); // "Ana"console.log(user.age); // 30O segundo parâmetro opcional é uma função reviver, que permite transformar valores durante o parsing:
const jsonString = '{"date": "2024-01-15T10:30:00Z", "count": "42"}';const obj = JSON.parse(jsonString, (key, value) => { if (key === 'date') return new Date(value); if (key === 'count') return parseInt(value, 10); return value;});
console.log(obj.date instanceof Date); // trueconsole.log(typeof obj.count); // "number"JSON.stringify() — convertendo objeto em string
O método JSON.stringify() faz o oposto — transforma um objeto JavaScript em uma string JSON. Ele aceita três parâmetros: o valor, uma função substituta (ou array de chaves) e o número de espaços para formatação.
const user = { name: "João", age: 25, roles: ["admin", "editor"], metadata: null};
// Uso básicoconst json = JSON.stringify(user);console.log(json);// {"name":"João","age":25,"roles":["admin","editor"],"metadata":null}
// Com formataçãoconst prettyJson = JSON.stringify(user, null, 2);console.log(prettyJson);/*{ "name": "João", "age": 25, "roles": ["admin", "editor"], "metadata": null}*/A função substituta permite filtrar ou transformar valores:
const user = { name: "Pedro", password: "secret123", age: 28 };
const safeJson = JSON.stringify(user, (key, value) => { if (key === 'password') return undefined; // remove a senha return value;});
console.log(safeJson); // {"name":"Pedro","age":28}Leitura e escrita de arquivos JSON no Node.js
Em projetos reais, dados JSON são frequentemente armazenados em arquivos. O Node.js fornece o módulo fs (file system) para trabalhar com o sistema de arquivos.
Lendo JSON de um arquivo
const fs = require('fs');
// Leitura síncronatry { const data = fs.readFileSync('config.json', 'utf8'); const config = JSON.parse(data); console.log(config.port); // 3000} catch (err) { console.error('Erro ao ler arquivo:', err.message);}
// Leitura assíncrona (recomendada)fs.readFile('config.json', 'utf8', (err, data) => { if (err) { console.error('Erro:', err); return; } const config = JSON.parse(data); console.log(config);});Escrevendo JSON em um arquivo
const fs = require('fs');
const settings = { theme: "dark", language: "pt", notifications: true};
// Escrita com formataçãofs.writeFileSync('settings.json', JSON.stringify(settings, null, 2), 'utf8');console.log('Arquivo settings.json criado');
// Escrita assíncronafs.writeFile('settings.json', JSON.stringify(settings), (err) => { if (err) throw err; Também na biblioteca
Migrações de banco de dados em Java: visão geral das ferramentas populares
Rate Limiting em JavaScript (Node.js): Guia Completo da Biblioteca express-rate-limit
Configuração de aplicações Java: bibliotecas e ferramentas