Formatação e Validação de JSON: Guia Completo para Desenvolvedores
· 12 min de leitura
Índice
- Regras de Sintaxe JSON
- Erros Comuns de JSON e Como Corrigi-los
- Formatação e Pretty-Printing
- Consultas JSONPath
- Validação de JSON Schema
- JSON vs YAML vs XML
- Trabalhando com JSON em JavaScript
- Trabalhando com JSON em Python
- JSON na Linha de Comando
- Melhores Práticas de Segurança JSON
- Técnicas Avançadas de JSON
- Perguntas Frequentes
JSON (JavaScript Object Notation) tornou-se o padrão de fato para intercâmbio de dados na web. Seja construindo APIs REST, configurando aplicações ou armazenando dados estruturados, entender formatação e validação de JSON é essencial para o desenvolvimento moderno.
Este guia abrangente cobre tudo, desde regras básicas de sintaxe até técnicas avançadas de validação, considerações de segurança e ferramentas práticas em diferentes linguagens de programação e ambientes.
Regras de Sintaxe JSON
JSON é um formato de intercâmbio de dados leve e baseado em texto que é tanto legível por humanos quanto analisável por máquinas. Apesar do nome sugerir uma conexão com JavaScript, JSON é completamente independente de linguagem e suportado por praticamente todas as linguagens de programação modernas.
O formato foi originalmente especificado por Douglas Crockford e agora é definido pela RFC 8259. Sua simplicidade e universalidade o tornaram a escolha preferida para APIs, arquivos de configuração, bancos de dados NoSQL e sistemas de armazenamento de dados em todo o mundo.
Tipos de Dados Principais
JSON suporta exatamente seis tipos de dados, cada um com requisitos específicos de formatação:
| Tipo | Exemplo | Notas |
|---|---|---|
| String | "hello world" |
Deve usar aspas duplas, suporta sequências de escape Unicode |
| Number | 42, 3.14, -1, 2.5e10 |
Sem zeros à esquerda, sem hexadecimal, suporta notação científica |
| Boolean | true, false |
Apenas minúsculas, sem aspas |
| Null | null |
Apenas minúsculas, representa ausência de valor |
| Object | {"key": "value"} |
Coleção não ordenada, chaves devem ser strings |
| Array | [1, 2, 3] |
Lista ordenada, pode conter tipos mistos |
Dica profissional: Use nosso Formatador JSON para validar e formatar instantaneamente seu JSON com destaque de sintaxe e detecção de erros.
Regras de Escape de String
Strings JSON requerem escape adequado para caracteres especiais. Aqui estão as sequências de escape essenciais:
\"- Aspas duplas\\- Barra invertida\/- Barra (opcional mas válido)\b- Backspace\f- Form feed\n- Nova linha\r- Retorno de carro\t- Tab\uXXXX- Caractere Unicode (4 dígitos hexadecimais)
Exemplo com caracteres escapados:
{
"message": "Linha 1\nLinha 2",
"path": "C:\\Users\\Documents",
"quote": "Ele disse \"Olá\"",
"emoji": "\u2764\uFE0F"
}
Especificações de Formato de Número
Números JSON seguem regras de formatação rigorosas que diferem de algumas linguagens de programação:
- Sem zeros à esquerda:
042é inválido, use42 - Sem hexadecimal:
0xFFé inválido - Sem octal:
0o77é inválido - Ponto decimal requer dígitos:
.5é inválido, use0.5 - Notação científica permitida:
1.5e10,2E-5 - Sem valores especiais:
NaN,Infinity,-Infinitysão inválidos
Erros Comuns de JSON e Como Corrigi-los
Até desenvolvedores experientes cometem erros de sintaxe JSON. Entender os erros mais comuns ajuda você a depurar mais rápido e escrever JSON válido desde o início.
| Erro | Exemplo Inválido | Exemplo Válido | Explicação |
|---|---|---|---|
| Vírgula final | {"a": 1,} |
{"a": 1} |
JSON não permite vírgulas finais em objetos ou arrays |
| Aspas simples | {'a': 'b'} |
{"a": "b"} |
Apenas aspas duplas são válidas para strings e chaves |
| Chaves sem aspas | {name: "John"} |
{"name": "John"} |
Chaves de objeto devem sempre ser strings entre aspas |
| Comentários | {"a": 1} // comment |
Não permitido | A especificação JSON não suporta comentários |
| Valores sem aspas | hello |
"hello" |
Valores de nível superior devem ser objetos, arrays ou strings entre aspas |
| Undefined | {"a": undefined} |
{"a": null} |
Use null em vez de undefined |
| Aspas faltando | {"date": 2024-01-01} |
{"date": "2024-01-01"} |
Valores não numéricos precisam de aspas |
Dica rápida: Use nosso Validador JSON para detectar esses erros instantaneamente com mensagens de erro detalhadas mostrando exatamente onde o problema ocorre.
Depurando Erros de Análise
Quando a análise de JSON falha, as mensagens de erro frequentemente apontam para a posição do caractere. Aqui está como interpretar mensagens de erro comuns:
- "Unexpected token" - Geralmente significa que um caractere de sintaxe está no lugar errado (vírgula, colchete, aspas)
- "Unexpected end of input" - Faltando colchete de fechamento, chave ou aspas
- "Expected property name" - Chave de objeto faltando ou inválida
- "Unexpected string" - Vírgula faltando entre propriedades de objeto ou elementos de array
A maioria dos validadores modernos mostrará a linha e coluna exatas onde o erro ocorre, tornando a depuração muito mais rápida do que a inspeção manual.
Formatação e Pretty-Printing
JSON minificado é compacto e eficiente para transmissão de dados, mas é quase impossível para humanos lerem. Pretty-printing adiciona espaços em branco para tornar a estrutura clara e navegável.
Minificado vs Pretty-Printed
Aqui estão os mesmos dados em ambos os formatos:
// Minificado (1 linha, 68 bytes)
{"name":"John","age":30,"city":"New York","skills":["JavaScript","Python"]}
// Pretty-printed com indentação de 2 espaços (6 linhas, 108 bytes)
{
"name": "John",
"age": 30,
"city": "New York",
"skills": ["JavaScript", "Python"]
}
A versão minificada economiza 40 bytes (redução de 37%), mas sacrifica toda a legibilidade. Para APIs de produção, JSON minificado reduz a largura de banda e melhora o desempenho. Para desenvolvimento, arquivos de configuração e depuração, JSON pretty-printed é essencial.
Estilos de Indentação
Diferentes comunidades têm diferentes preferências para indentação:
- 2 espaços - Mais popular em desenvolvimento web, JavaScript e APIs JSON
- 4 espaços - Comum em projetos Python e aplicações Java empresariais
- Tabs - Menos comum para JSON, mas usado em alguns projetos para acessibilidade
A chave é a consistência dentro do seu projeto. A maioria das equipes impõe isso através de ferramentas de linting e configurações de editor.
Dica profissional: Configure seu editor para formatar JSON ao salvar. Usuários do VS Code podem adicionar "editor.formatOnSave": true às suas configurações e instalar uma extensão de formatador JSON.
Ordenando Chaves de Objeto
Embora objetos JSON sejam tecnicamente não ordenados, ordenar chaves alfabeticamente pode melhorar a legibilidade e tornar os diffs mais limpos no controle de versão:
// Não ordenado
{
"version": "1.0",
"name": "myapp",
"author": "John Doe",
"dependencies": {}
}
// Ordenado alfabeticamente
{
"author": "John Doe",
"dependencies": {},
"name": "myapp",
"version": "1.0"
}
Muitos formatadores JSON oferecem ordenação automática de chaves como uma opção. Isso é particularmente útil para arquivos de configuração que são frequentemente editados por múltiplos desenvolvedores.
Consultas JSONPath
JSONPath fornece uma linguagem de consulta para extrair dados de documentos JSON, similar a como XPath funciona para XML. É inestimável ao trabalhar com estruturas aninhadas complexas ou quando você precisa extrair valores específicos programaticamente.
Sintaxe Básica de JSONPath
Expressões JSONPath começam com $ representando o elemento raiz, seguido por operadores filhos e filtros:
| Expressão | Significado | Exemplo de Resultado |
|---|---|---|
$ |
Elemento raiz | Documento inteiro |
$.store.book |
Todos os livros na loja | Array de objetos livro |
$.store.book[0] |
Primeiro livro | Objeto livro único |
$.store.book[-1] |
Último livro | Objeto livro único |
$.store.book[0,2] |
Primeiro e terceiro livros | Array com 2 livros |
$.store.book[0:2] |
Primeiros dois livros (slice) | Array com 2 livros |
$.store.book[*].title |
Todos os títulos de livros | Array de strings |
$..price |
Todos os preços (recursivo) | Array de números |
$.store.book[?(@.price<10)] |
Livros abaixo de $10 | Array filtrado |
$.store.book[?(@.category=='fiction')] |
Livros de ficção | Array filtrado |
Dica rápida: Teste suas consultas JSONPath interativamente com nossa ferramenta JSONPath Finder para ver resultados em tempo real.
Filtragem Avançada
JSONPath suporta expressões de filtro complexas usando operadores de comparação e condições lógicas:
==- Igual (use = único em algumas implementações)!=- Diferente<,<=,>,>=- Operadores de comparação&&- E lógico||- OU lógico@- Nó atual no filtro
Exemplo com múltiplas condições:
// Encontrar livros que são ficção E abaixo de $15
$.store.book[?(@.category=='fiction' && @.price<15)]
// Encontrar livros de autores específicos
$.store.book[?(@.author=='Tolkien' || @.author=='Rowling')]
// Encontrar livros com ISBN
$.store.book[?(@.isbn)]
Casos de Uso Práticos
JSONPath se destaca em vários cenários do mundo real:
- Análise de resposta de API - Extrair campos específicos de respostas de API complexas sem travessia manual
- Gerenciamento de configuração - Consultar valores de configuração aninhados em arquivos de configuração grandes
- Transformação de dados - Selecionar e remodelar dados para pipelines ETL
- Teste e validação - Afirmar valores específicos em suítes de teste de API
- Análise de logs - Extrair campos relevantes de logs JSON estruturados
Validação de JSON Schema
JSON Schema é um vocabulário que permite anotar e validar documentos JSON. Ele fornece um contrato para seus dados JSON, garantindo que atendam a requisitos estruturais e de tipo específicos.
Por Que Usar JSON Schema?
Validação de schema oferece vários benefícios críticos:
- Validação de dados - Verificar automaticamente se os dados recebidos correspondem à estrutura esperada
- Documentação - Schema serve como documentação legível por máquina
- Geração de código - Gerar tipos, classes e código de validação a partir de schemas
- Contratos de API - Definir contratos claros entre serviços
- Prevenção de erros - Detectar problemas de dados antes que causem erros em tempo de execução
Exemplo de Schema Básico
Aqui está um schema simples definindo um objeto de usuário:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer",
"minimum": 0,
"maximum": 150
},
"roles": {
"type": "array",
"items": {
"type": "string",
"enum": ["admin", "user", "guest"]
},
"minItems": 1,
"uniqueItems": true
}
},
"required": ["name", "email"],
"additionalProperties": false
}
Este schema impõe que objetos de usuário válidos devem ter um nome e email, com campos opcionais de idade e roles que atendem a restrições específicas.