JSON em JavaScript
JSON (JavaScript Object Notation) é um formato leve de troca de dados. Pense nele como uma caixa de envio padronizada — não importa o que você coloca dentro, a embalagem segue uma especificação universal para que o destinatário saiba exatamente como abrir. Comunicação front-end/back-end, arquivos de configuração, armazenamento local — JSON está em todo lugar.
Regras de Sintaxe do JSON
JSON se parece muito com um objeto literal JS, mas as regras são mais rígidas:
| Regra | Descrição |
|---|---|
| Chaves devem usar aspas duplas | "nome" ✅ nome ❌ 'nome' ❌ |
| Valores string devem usar aspas duplas | "olá" ✅ 'olá' ❌ |
| Sem vírgulas finais | {"a":1,} ❌ |
| Tipos de valor limitados | string, número, booleano, null, objeto, array |
| Não permitido | undefined, funções, comentários |
{
"nome": "Alice",
"idade": 25,
"habilidades": ["HTML", "CSS", "JS"],
"endereco": {
"cidade": "São Paulo",
"cep": "01001-000"
},
"ativo": true,
"conjuge": null
}
'chave' ou 'valor' — isso é válido em JS mas ilegal em JSON.
JSON.stringify()
JSON.stringify() converte um valor JS em uma string JSON — serialização.
<script>
JSON.stringify(valor)
JSON.stringify(valor, substituidor)
JSON.stringify(valor, substituidor, espaco)
</script>
| Parâmetro | Descrição |
|---|---|
valor |
O valor a serializar |
substituidor |
Filtrar ou transformar — uma função ou array |
espaco |
Indentação — número ou string, para formatação bonita |
Exemplo: Serialização e Formatação
<div id="output" style="white-space: pre; font-family: monospace; padding: 10px; border: 1px solid #ccc;"></div>
<script>
const aluno = {
nome: 'Bob',
idade: 20,
notas: [95, 88, 92],
ativo: true,
serie: undefined,
aniversario: new Date()
};
const output = document.getElementById('output');
const compacto = JSON.stringify(aluno);
output.textContent = 'Saída compacta:\n' + compacto + '\n\n';
const bonito = JSON.stringify(aluno, null, 2);
output.textContent += 'Saída formatada:\n' + bonito + '\n\n';
const filtrado = JSON.stringify(aluno, ['nome', 'notas'], 2);
output.textContent += 'Apenas nome e notas:\n' + filtrado;
</script>
undefined, funções e Symbols são ignorados durante a serialização (propriedades desaparecem de objetos, viram null em arrays). Objetos Date são convertidos para strings ISO.
JSON.parse()
JSON.parse() converte uma string JSON de volta em um valor JS — desserialização.
<script>
JSON.parse(texto)
JSON.parse(texto, recuperador)
</script>
| Parâmetro | Descrição |
|---|---|
texto |
A string JSON |
recuperador |
Uma função de transformação aplicada a cada par chave-valor |
Exemplo: Desserialização
<div id="output" style="white-space: pre; font-family: monospace; padding: 10px; border: 1px solid #ccc;"></div>
<script>
const output = document.getElementById('output');
const jsonStr = '{"nome":"Charlie","idade":30,"hobbies":["ler","programar"]}';
const obj = JSON.parse(jsonStr);
output.textContent = 'Resultado do parse:\n';
output.textContent += 'Nome: ' + obj.nome + '\n';
output.textContent += 'Idade: ' + obj.idade + '\n';
output.textContent += 'Hobbies: ' + obj.hobbies.join(', ') + '\n\n';
const arr = JSON.parse('[1, 2, 3, 4, 5]');
output.textContent += 'Array parseado: ' + arr + '\n';
output.textContent += 'Soma do array: ' + arr.reduce(function(a, b) { return a + b; }, 0);
</script>
JSON vs Objeto JS
| Comparação | JSON | Objeto JS |
|---|---|---|
| Natureza | String (texto) | Estrutura de dados em memória |
| Aspas nas chaves | Aspas duplas obrigatórias | Omitíveis (para identificadores válidos) |
| Tipos de valor | Limitados (6 tipos) | Qualquer tipo |
| Vírgulas finais | Não permitidas | Permitidas |
| Comentários | Não permitidos | Suportados (via ferramentas) |
parse para transformá-lo em um objeto com o qual pode trabalhar.
Exemplo: Erros Comuns de JSON
<div id="output" style="white-space: pre; font-family: monospace; padding: 10px; border: 1px solid #ccc;"></div>
<script>
const output = document.getElementById('output');
function tentarParse(str, rotulo) {
try {
JSON.parse(str);
output.textContent += rotulo + ': ✅ Sucesso\n';
} catch (e) {
output.textContent += rotulo + ': ❌ ' + e.message + '\n';
}
}
tentarParse("{'nome':'Tom'}", 'Chave com aspas simples');
tentarParse('{"nome":"Tom",}', 'Vírgula final');
tentarParse('{"nome":undefined}', 'Valor undefined');
tentarParse('{"nome":"Tom"}', 'JSON válido');
tentarParse('{"a":1,"b":2}', 'JSON válido (sem espaços)');
</script>
undefined. Ao depurar problemas de JSON, cole no console do navegador com JSON.parse() — a mensagem de erro indicará o local exato.
📖 Resumo
- JSON é um formato de dados baseado em string — chaves devem ter aspas duplas, sem vírgulas finais, tipos de valor limitados
JSON.stringify()serializa,JSON.parse()desserializa — são operações inversasundefined, funções e Symbols são ignorados ou viramnulldurante a serialização- O parâmetro
espacoemJSON.stringifytorna a saída legível; o parâmetrosubstituidorfiltra campos - Fazer parse de JSON inválido lança uma exceção — sempre envolva em
try/catch
❓ Perguntas Frequentes
P: Por que
JSON.stringify(NaN)retornanull? R: A especificação JSON não temNaN,Infinityou-Infinity— todos viramnulldurante a serialização. Se precisar preservar esses valores, use uma funçãosubstituidorpersonalizada.
P:
JSON.parseconsegue fazer parse de literais de objeto JS? R: Não.JSON.parse('{}')funciona, masJSON.parse('{a:1}')lança um erro — a chave falta aspas duplas. A sintaxe JSON é mais rigorosa que literais de objeto JS.
P: É possível escrever comentários em JSON? R: JSON padrão não suporta comentários. Se necessário, use um campo como
"_comentario": "descricao"como alternativa, embora isso não seja uma convenção formal.
📝 Atividades
- Básico: Crie um array de 3 objetos de alunos e formate a saída com
JSON.stringify(indentação de 2 espaços). - Intermediário: Escreva uma função
parseSeguro(str)que envolvaJSON.parseemtry/catch, retornando o resultado em caso de sucesso ounullcom mensagem de erro em caso de falha. - Desafio: Construa um "bloco de notas local" — use
promptpara entrada, salve nolocalStoragecomJSON.stringify, e carregue/exiba ao carregar a página comJSON.parse.



