Processamento JSON em Node.js: guia completo
JSON (JavaScript Object Notation) é um formato leve de troca de dados, baseado na sintaxe de objetos JavaScript. No ambiente Node.js, trabalhar com JSON é uma tarefa cotidiana: desde arquivos de configuração até requisições de API. Neste artigo, vamos detalhar todos os aspectos do processamento JSON, incluindo parsing, serialização, validação e trabalho com arquivos grandes.
Métodos básicos: JSON.parse() e JSON.stringify()
Dois métodos principais para trabalhar com JSON estão embutidos diretamente no JavaScript. Eles estão disponíveis globalmente e não requerem instalação de bibliotecas adicionais.
JSON.parse() — conversão de string em objeto
O método JSON.parse() recebe uma string JSON e retorna o objeto JavaScript correspondente. Se a string contiver JSON inválido, uma exceção SyntaxError será lançada.
const jsonString = '{"name": "Анна", "age": 28, "isStudent": false}';const user = JSON.parse(jsonString);console.log(user.name); // "Анна"console.log(user.age); // 28Como segundo parâmetro opcional, pode-se passar uma função reviver, que permite modificar os valores durante o parsing:
const json = '{"year": "2024", "price": "1500.50"}';const data = JSON.parse(json, (key, value) => { if (key === 'price') return parseFloat(value); if (key === 'year') return parseInt(value); return value;});console.log(typeof data.price); // "number"JSON.stringify() — conversão de objeto em string
O método JSON.stringify() faz o oposto: transforma um objeto ou valor em uma string JSON. Ele aceita até três argumentos: o valor, uma função substituidora ou array de chaves, e a quantidade de espaços para formatação.
const user = { name: "Иван", age: 32, skills: ["JS", "Node", "Python"]};
// Sem formataçãoconsole.log(JSON.stringify(user));// {"name":"Иван","age":32,"skills":["JS","Node","Python"]}
// Com formatação (2 espaços)console.log(JSON.stringify(user, null, 2));/*{ "name": "Иван", "age": 32, "skills": [ "JS", "Node", "Python" ]}*/O segundo argumento pode ser um array de chaves para filtragem:
console.log(JSON.stringify(user, ['name', 'age']));// {"name":"Иван","age":32}Trabalhando com arquivos JSON em Node.js
Em Node.js, é frequente a necessidade de ler e escrever arquivos JSON. Para isso, utilizam-se os módulos fs (file system).
Leitura de arquivo JSON
const fs = require('fs');
// Leitura síncronatry { const data = fs.readFileSync('config.json', 'utf8'); const config = JSON.parse(data); console.log(config.port);} catch (err) { console.error('Erro ao ler arquivo:', err.message);}
// Leitura assíncronafs.readFile('config.json', 'utf8', (err, data) => { if (err) { console.error('Erro:', err); return; } const config = JSON.parse(data); console.log(config.port);});Escrita de arquivo JSON
const fs = require('fs');
const settings = { theme: 'dark', language: 'ru', fontSize: 14};
// Escrita síncronafs.writeFileSync('settings.json', JSON.stringify(settings, null, 2));
// Escrita assíncronafs.writeFile('settings.json', JSON.stringify(settings, null, 2), (err) => { if (err) console.error('Erro ao escrever:', err); else console.log('Arquivo salvo');});Validação JSON
Antes de usar os dados, é sempre bom verificar sua validade. A maneira mais simples é envolver JSON.parse() em um try-catch. Para validação mais complexa da estrutura, podem-se usar bibliotecas.
Verificação com try-catch
function safeJsonParse(str) { try { return { data: JSON.parse(str), error: null }; } catch (e) { return { data: null, error: e.message }; }} Também na biblioteca
Registro em Go: Visão geral da biblioteca padrão log e alternativas
Geolocalização e mapas em Java: visão geral de bibliotecas e ferramentas
Redis-rs para Rust: guia completo com exemplos
Parsing de HTML em C++: bibliotecas e exemplos para trabalhar com DOM e XPath