JSON em Node.js: Guia Completo para Processamento de Dados
JSON (JavaScript Object Notation) é um formato leve de troca de dados que se tornou o padrão de facto para APIs web, arquivos de configuração e armazenamento de informações estruturadas. No ambiente Node.js, trabalhar com JSON é parte integrante de praticamente qualquer aplicação. Neste artigo, abordaremos detalhadamente todos os aspectos do processamento de JSON: desde o parsing básico até o processamento avançado com streams.
1. Fundamentos: Parsing e Serialização
No Node.js, dois métodos globais são usados para trabalhar com JSON: JSON.parse() e JSON.stringify(). Eles estão disponíveis sem a necessidade de importar módulos adicionais.
JSON.parse() — Convertendo String em Objeto
O método JSON.parse() recebe uma string JSON e retorna o objeto JavaScript correspondente. É importante que a string seja estritamente um JSON válido.
const jsonString = '{"name": "Alice", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);console.log(user.name); // Aliceconsole.log(typeof user); // objectO método também aceita um segundo argumento — uma função "reviver" que permite transformar valores durante o processo de parsing:
const data = '{"date": "2025-01-15T10:00:00Z"}';const parsed = JSON.parse(data, (key, value) => { if (key === 'date') return new Date(value); return value;});console.log(parsed.date instanceof Date); // trueJSON.stringify() — Convertendo Objeto em String
O método JSON.stringify() faz a operação inversa — transforma um objeto JavaScript em uma string JSON.
const user = { name: 'Bob', age: 25, hobbies: ['coding', 'reading']};const json = JSON.stringify(user);console.log(json); // {"name":"Bob","age":25,"hobbies":["coding","reading"]}O método aceita três argumentos: o valor, uma função de substituição (replacer) e o número de espaços para formatação (space):
const obj = { a: 1, b: 2, c: 3 };// Saída formatada com indentaçãoconsole.log(JSON.stringify(obj, null, 2));// {// "a": 1,// "b": 2,// "c": 3// }
// Filtragem de chaves usando replacerconst filtered = JSON.stringify(obj, ['a', 'c'], 2);console.log(filtered);// {// "a": 1,// "c": 3// }2. Leitura e Escrita de Arquivos JSON
Em aplicações reais, dados JSON são frequentemente armazenados em arquivos. Para trabalhar com o sistema de arquivos, utiliza-se o módulo embutido fs.
Leitura e Escrita Síncronas
const fs = require('fs');const path = require('path');
const filePath = path.join(__dirname, 'config.json');
// Leituraconst rawData = fs.readFileSync(filePath, 'utf-8');const config = JSON.parse(rawData);console.log(config.port);
// Escritaconst newConfig = { port: 3000, host: 'localhost' };fs.writeFileSync(filePath, JSON.stringify(newConfig, null, 2));Leitura e Escrita Assíncronas (Método Recomendado)
const fs = require('fs').promises;
async function readConfig() { try { const data = await fs.readFile('config.json', 'utf-8'); return JSON.parse(data); } catch (err) { console.error('Erro ao ler o arquivo:', err); throw err; }}
async function writeConfig(config) { await fs.writeFile('config.json', JSON.stringify(config, null, 2));}
// Uso(async () => { const config = await readConfig(); config.port = 4000; await writeConfig(config);})();3. Validação de JSON
Às vezes é necessário verificar se uma string é um JSON válido sem lançar uma exceção. A maneira mais confiável é envolver JSON.parse() em um bloco try-catch:
Também na biblioteca
Tonic para Rust: guia completo com exemplos
Migrações de banco de dados em C# (.NET): Entity Framework Migrations
csv — Trabalhando com arquivos CSV em Rust
Kotlin Symbol Processing (KSP) para Kotlin: guia completo com exemplos
Trabalhando com XML em JavaScript (Node.js): parsing, criação e validação
Recommendations