O Que é JSON?
JSON (JavaScript Object Notation) é um formato de intercâmbio de dados leve, baseado em texto, fácil de ler e escrever para humanos, e simples de analisar e gerar para máquinas. Embora derive da sintaxe do JavaScript, o JSON é independente de linguagem — praticamente todas as linguagens de programação modernas possuem bibliotecas para analisá-lo e produzi-lo.
O JSON foi introduzido por Douglas Crockford no início dos anos 2000 como uma alternativa mais simples ao XML para troca de dados na web. Hoje, é o formato dominante para REST APIs, arquivos de configuração, bancos de dados como MongoDB e muito mais.
Sintaxe JSON: O Quadro Completo
Um valor JSON é um dos seguintes:
- Objeto:
{ "chave": valor, ... }— uma coleção não ordenada de pares chave-valor - Array:
[ valor, ... ]— uma lista ordenada de valores - String:
"olá mundo"— deve usar aspas duplas - Número:
42,3.14,-7,1.5e10— sem distinção entre inteiro e decimal - Booleano:
trueoufalse - Nulo:
null
{
"nome": "Alice",
"idade": 30,
"ativo": true,
"pontuacoes": [95, 87, 100],
"endereco": {
"cidade": "Lisboa",
"codigoPostal": "1000-001"
},
"notas": null
}
Erros de Sintaxe Comuns
| Erro | Incorreto | Correto |
|---|---|---|
| Vírgula final | { "a": 1, } |
{ "a": 1 } |
| Aspas simples | { 'chave': 'val' } |
{ "chave": "val" } |
| Chave sem aspas | { chave: "val" } |
{ "chave": "val" } |
| Comentários | { // comentário } |
(não suportado) |
| Undefined | { "a": undefined } |
Usar null ou omitir a chave |
Uma Breve História do JSON
- 2001: Douglas Crockford começa a promover o JSON como protocolo de comunicação sem estado entre servidor e navegador
- 2006: A IETF publica o RFC 4627, a primeira especificação formal do JSON
- 2013: A ECMA International formaliza o JSON como ECMA-404
- 2017: O RFC 8259 substitui todos os anteriores e se torna o padrão definitivo
Antes do JSON, o XML dominava a comunicação entre APIs. A concisão do JSON e seu encaixe natural com os objetos JavaScript fizeram dele um sucesso estrondoso na era Web 2.0 — uma tendência que só acelerou desde então.
Onde o JSON é Usado
REST APIs
Quase toda REST API hoje retorna JSON. Uma requisição a uma API de clima pode retornar algo assim:
{
"localizacao": "São Paulo",
"temperatura": 22.4,
"unidade": "celsius",
"condicoes": ["nublado", "úmido"],
"previsao": [
{ "dia": "Segunda-feira", "maxima": 24, "minima": 18 },
{ "dia": "Terça-feira", "maxima": 21, "minima": 16 }
]
}
Arquivos de Configuração
Ferramentas como ESLint (.eslintrc.json), TypeScript (tsconfig.json) e npm (package.json) usam JSON para configuração.
Bancos de Dados NoSQL
O MongoDB armazena documentos em BSON (JSON Binário). CouchDB, Firebase Firestore e DynamoDB utilizam modelos de documentos semelhantes ao JSON.
Armazenamento Local e Cookies
O localStorage do navegador armazena apenas strings, então os desenvolvedores costumam usar JSON.stringify() antes de salvar e JSON.parse() ao recuperar os dados.
Logging e Observabilidade
O logging estruturado em JSON torna trivial a consulta de logs com ferramentas como Elasticsearch, Datadog ou Loki.
Análise de JSON na Prática
JavaScript / TypeScript
// Converter string para objeto
const dados = JSON.parse('{"nome":"Alice","idade":30}');
console.log(dados.nome); // "Alice"
// Serializar objeto para string
const json = JSON.stringify({ nome: "Alice", idade: 30 }, null, 2);
O argumento opcional null, 2 em JSON.stringify ativa a formatação legível com 2 espaços de indentação — inestimável para depuração.
Python
import json
# Analisar
dados = json.loads('{"nome": "Alice", "idade": 30}')
print(dados["nome"]) # Alice
# Serializar
texto = json.dumps({"nome": "Alice", "idade": 30}, indent=2, ensure_ascii=False)
Go
import (
"encoding/json"
"fmt"
)
type Pessoa struct {
Nome string `json:"nome"`
Idade int `json:"idade"`
}
func main() {
var p Pessoa
json.Unmarshal([]byte(`{"nome":"Alice","idade":30}`), &p)
fmt.Println(p.Nome)
}
Tópicos Avançados
JSON Schema
O JSON Schema é um vocabulário para validar a estrutura de dados JSON. Permite definir campos obrigatórios, tipos de valores, padrões e restrições:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"nome": { "type": "string" },
"idade": { "type": "integer", "minimum": 0 }
},
"required": ["nome", "idade"]
}
JSON Pointer (RFC 6901)
O JSON Pointer fornece uma sintaxe em string para identificar um valor específico dentro de um documento JSON:
/nome→ o camponome/pontuacoes/0→ primeiro elemento do arraypontuacoes
JSON Patch (RFC 6902)
O JSON Patch define um formato para expressar uma sequência de operações a aplicar em um documento JSON — útil para atualizações incrementais em APIs.
Considerações de Desempenho
- Tamanho: JSON é baseado em texto e verboso. Para sistemas de alto throughput, considere alternativas binárias como MessagePack ou Protocol Buffers.
- Velocidade de análise: Parsers modernos (como simdjson) conseguem analisar gigabytes por segundo, mas na maioria das aplicações web, a análise JSON não é um gargalo.
- Estruturas profundamente aninhadas: Aninhamentos muito profundos podem causar erros de estouro de pilha em parsers recursivos. Mantenha as estruturas razoavelmente planas quando possível.
JSON vs XML vs YAML
| Característica | JSON | XML | YAML |
|---|---|---|---|
| Legibilidade | Boa | Verboso | Excelente |
| Comentários | ❌ | ✅ | ✅ |
| Suporte binário | ❌ (requer base64) | ❌ | ❌ |
| Validação de esquema | JSON Schema | XSD | ❌ (limitado) |
| Melhor para | APIs, config, armazenamento | Documentos, legado | Arquivos de config |
Melhores Práticas
- Validar na entrada: Nunca confie no JSON recebido — valide sempre contra um esquema ou verifique os campos esperados.
- Usar
nullintencionalmente: Distingua entre "campo ausente" e "campo explicitamente nulo". - Evitar estruturas profundamente aninhadas: Dados planos são mais fáceis de trabalhar. Use IDs para vincular objetos relacionados.
- Nomenclatura de chaves consistente: Escolha uma convenção (camelCase, snake_case) e mantenha-a em toda a sua API.
- Datas como strings ISO 8601: JSON não tem tipo data. Use o formato
"2025-04-09T00:00:00Z"para garantir interoperabilidade. - Minifique em produção, formate para depuração: Use JSON compacto em respostas de API para reduzir largura de banda; formate de forma legível localmente.
Resumo
O JSON se tornou a linguagem universal de troca de dados na web com razão: é simples, legível e suportado em todos os lugares. Entender sua sintaxe, limitações e melhores práticas fará de você um desenvolvedor mais eficaz — seja construindo APIs, escrevendo arquivos de configuração ou processando pipelines de dados.