Dados JSON (.json)
RFC PadrãoJavaScript Object Notation (JSON) é um formato de texto leve e legível por humanos para intercâmbio de dados, independente de linguagem e amplamente usado em APIs da web.
Converter JSON para HTML
Conversor gratuito de JSON para HTML no navegador. Converta arquivos instantaneamente no seu dispositivo.
Comprimir JSON online
Privado - os arquivos nunca saem do seu dispositivo
Inspeção e metadados
Sistemas operacionais e analisadores de arquivos identificam arquivos JSON pela sequência inicial de bytes:
Assinatura do arquivo em bytes (magic bytes)
Sistemas operacionais e analisadores de arquivos identificam arquivos JSON pela sequência inicial de bytes:
ASSINATURA HEXADECIMAL (DESLOCAMENTO 0):
7B ou 5BREPRESENTAÇÃO ASCII: { ou [
Padronização: RFC 8259 / ECMA-404 / ISO/IEC 21778
Especificações técnicas
| Estrutura do contêiner | Formato de intercâmbio de dados leve, baseado em texto e independente de linguagem |
| Compressão | Compactação de texto com Gzip, Brotli ou Zstandard (normalmente, reduz o tamanho em 80% a 90%) |
| Ordem dos bytes (endianness) | Unicode codificado em UTF-8 (recomenda-se não usar a marca de ordem de byte, ou BOM) |
| Espaços de cor | Não aplicável |
| Canais e Estrutura | Seis tipos básicos de dados: objeto, matriz (array), string, número, booleano e nulo |
| Dimensões Máximas | Ilimitado; limitado apenas pela memória do analisador e pelo comprimento máximo da string |
| Transparência | Não aplicável |
| Streaming e Progressivo | NDJSON (Newline Delimited JSON) / JSON Lines permitem o processamento progressivo em fluxo |
Matriz de comparação técnica: JSON e formatos concorrentes
| Atributo técnico | JSON (Atual) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Complexidade da sintaxe | Mínima (6 tipos, sintaxe estrita) | Alta (baseada em indentação, especificação complexa) | Alta (tags de fechamento verbosas, namespaces) | Formato binário de transmissão definido por esquema |
| Velocidade de análise | Extremamente rápido em todas as linguagens modernas | Lento (análise complexa de indentação) | Moderado a lento (construção pesada de DOM) | Desserialização binária sem cópia, extremamente rápida |
| Suporte a comentários | Não (deliberadamente excluídos para evitar a proliferação de metadados) | Sim (comentários #) | Sim (comentários <!-- -->) | Sim em arquivos .proto |
| Tamanho dos dados transmitidos | Texto compacto (taxa de gzip muito alta) | Texto compacto | Texto verboso (repetição pesada de tags) | Binário ultracompacto |
Modos comuns de corrupção e guia de recuperação com editor hexadecimal
SyntaxError: token , inesperado no JSON na posição X.
Causa principal: Vírgula final após o último item em uma matriz ou objeto, o que é estritamente ilegal no JSON RFC 8259.
Recuperação: Remova as vírgulas após o último membro de cada objeto e o último elemento de cada array antes de passar o JSON para JSON.parse().
SyntaxError: token ' inesperado no JSON.
Causa principal: Strings ou chaves delimitadas por aspas simples ('') em vez de aspas duplas ("").
Recuperação: Substitua todas as strings e chaves entre aspas simples por strings padrão entre aspas duplas.
Análise de segurança e vetores de ataque a analisadores
JSON contém apenas texto e não executa código diretamente, mas a análise de JSON não confiável pode levar à poluição de protótipos, a ataques ReDoS ou ao esgotamento de memória.
Vetores de ataque conhecidos
- Poluição de protótipo: chaves chamadas '__proto__' ou 'constructor' modificam Object.prototype em aplicações JavaScript.
- Negação de serviço por estouro da pilha causada por estruturas JSON profundamente aninhadas (por exemplo, 10.000 colchetes de abertura).
- Perda de precisão numérica: números JavaScript maiores que 2^53 - 1 (9.007.199.254.740.991) perdem precisão sem aviso.
Melhores práticas defensivas: Nunca avalie JSON com eval(). Use JSON.parse() e sanitize as propriedades __proto__ em funções recursivas de mesclagem de objetos.
Origens históricas e marcos
Principais vantagens
- Estrutura de texto legível por humanos, autodescritiva e concisa.
- Suporte nativo à análise de JSON nos mecanismos JavaScript (JSON.parse) e em todas as principais linguagens de programação.
- A especificação estrita evita a execução arbitrária de código.
Limitações técnicas e desvantagens
- Sem suporte a comentários, vírgulas finais (trailing commas) ou referências de objetos circulares.
- Sem tipos binários nativos (dados binários devem ser codificados em base64, aumentando o tamanho em 33%).
- Serialização ineficiente em comparação com formatos binários como Protocol Buffers ou MessagePack.
Curiosidades técnicas
- Douglas Crockford adicionou a cláusula de licença de software 'O Software deve ser usado para o Bem, não para o Mal' às ferramentas originais JSMin JSON.
- O JSON é um subconjunto estrito da sintaxe JavaScript, mas até o ES2019, os caracteres U+2028 e U+2029 sem escape eram válidos no JSON, mas inválidos em strings JavaScript.
- Douglas Crockford descobriu que os primeiros navegadores da web podiam avaliar JSON diretamente em objetos usando o eval() nativo do JavaScript antes que as APIs dedicadas JSON.parse() fossem padronizadas no ECMAScript 5.
Perguntas técnicas frequentes
Por que o JSON não permite comentários?
A gramática JSON não permite comentários. As implementações podem tratar extensões e dados específicos de aplicações de formas diferentes, por isso o formato, por si só, não garante interoperabilidade.
Como armazenar inteiros de 64 bits em JSON sem perder a precisão?
O tipo Number nativo do JavaScript é um número de ponto flutuante de precisão dupla IEEE 754, que representa com exatidão apenas inteiros até 2^53 - 1. Inteiros de 64 bits (como IDs de banco de dados ou carimbos de data/hora) devem ser serializados como strings no JSON (por exemplo, "1234567890123456789").
Qual é a diferença entre JSON e NDJSON / JSON Lines?
O JSON padrão reúne todos os dados em um único objeto ou array raiz, então os analisadores precisam carregar todo o texto antes de processá-lo. O NDJSON (Newline Delimited JSON) separa registros JSON válidos com quebras de linha (\n), permitindo transmitir e processar grandes conjuntos de dados, de vários gigabytes, linha por linha sem carregá-los inteiramente na memória.
Conversões de JSON relacionadas
A conversão de dados JSON em código-fonte HTML transforma pares de chave-valor estruturados em documentos web legíveis por humanos, prontos para renderização em navegadores.
A conversão de código-fonte HTML em dados JSON transforma documentos web legíveis em pares de chave e valor estruturados para processamento por programas e integração com APIs.
A conversão de um script de texto SQL Dump numa exportação de dados JSON transforma tabelas rígidas de bancos de dados relacionais em objetos flexíveis e aninhados para aplicações web modernas.
A transformação de arquivos de texto JSON não estruturados em bancos de dados relacionais SQLite estruturados permite indexar e consultar rapidamente grandes conjuntos de registros.
Converter arquivos Adobe Swatch Exchange em estruturas JSON de cores transforma paletas binárias de design em objetos de texto legíveis por aplicativos web modernos.
Converter dados de texto JSON de cores em amostras binárias Adobe ASE conecta tokens de design usados na web a programas profissionais de diagramação para computador.
A conversão de arquivos de texto de paleta GIMP para estruturas JSON de cores permite que aplicações web leiam amostras de cores diretamente, sem scripts de análise complexos.
Converter arquivos JSON de cores estruturados em variáveis CSS transforma objetos de dados brutos em propriedades de estilo que os sites podem usar diretamente.