Introdução ao JSON e seu Papel no JavaScript
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados baseado na sintaxe de objetos JavaScript. Apesar de suas origens, o JSON se tornou um padrão universal para transmitir dados estruturados entre servidor e cliente, além de armazenar configurações e trocar informações em arquiteturas de microsserviços.
No ambiente Node.js, trabalhar com JSON é uma tarefa diária: desde a leitura de arquivos de configuração até o processamento de respostas de APIs REST. Neste artigo, vamos analisar detalhadamente dois métodos-chave — JSON.parse() e JSON.stringify(), além de examinar erros típicos e melhores práticas.
1. Analisando JSON: O Método JSON.parse()
O método JSON.parse() converte uma string formatada em JSON em um objeto JavaScript. Isso é necessário quando você recebe dados de um servidor, de um arquivo ou de uma fonte externa.
Sintaxe Básica
const jsonString = '{"name": "Anna", "age": 30, "isStudent": false}';const user = JSON.parse(jsonString);console.log(user.name); // "Anna"console.log(user.age); // 30Uso Avançado: A Função Reviver
O segundo argumento de JSON.parse() pode aceitar uma função reviver, que permite modificar valores durante a análise. Isso é útil para converter strings de data em objetos Date ou para validação de dados.
const jsonData = '{"date": "2024-01-15T10:30:00.000Z", "value": 42}';const parsed = JSON.parse(jsonData, (key, value) => { if (key === 'date') { return new Date(value); } return value;});console.log(parsed.date instanceof Date); // trueconsole.log(parsed.date.toLocaleDateString()); // "15/01/2024"Tratamento de Erros de Análise
JSON inválido lançará um SyntaxError. Sempre envolva a chamada JSON.parse() em um bloco try...catch:
function safeParse(jsonString) { try { return { data: JSON.parse(jsonString), error: null }; } catch (error) { console.error('Erro ao analisar JSON:', error.message); return { data: null, error: error.message }; }}
const result = safeParse('{"name": "Erro"}');console.log(result.data.name); // "Erro"2. Serialização para JSON: O Método JSON.stringify()
O método JSON.stringify() executa a tarefa inversa — ele converte um objeto JavaScript em uma string JSON. Isso é usado ao enviar dados para um servidor, salvar estado ou registrar logs.
Sintaxe Básica
const user = { name: 'Ivan', age: 25, skills: ['JavaScript', 'Node.js']};
const jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"Ivan","age":25,"skills":["JavaScript","Node.js"]}Parâmetros de Formatação
O terceiro argumento de JSON.stringify() permite definir a indentação para uma saída legível. Isso é especialmente útil ao escrever em arquivos ou durante a depuração.
const config = { server: { port: 3000, host: 'localhost' }, database: { host: 'db.example.com', port: 5432 }};
// Saída compactaconsole.log(JSON.stringify(config));
// Saída legível com indentação de 2 espaçosconsole.log(JSON.stringify(config, null, 2));// {// "server": {// "port": 3000,// "host": "localhost"// },// ...// }Filtrando Propriedades com o Replacer
O segundo argumento é um array ou função que determina quais propriedades incluir na string resultante.
const user = { id: 1, name: 'Maria', email: 'maria@example.com', password: 'secret123', role: 'admin'};
// Excluindo dados confidenciaisconst safeUser = JSON.stringify(user, ['id', 'name', 'email', 'role']);console.log(safeUser);// {"id":1,"name":"Maria","email":"maria@exa