JSON
13 tools
O que é JSON?
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados baseado em texto, fácil de ler e escrever para humanos e fácil de analisar e gerar para máquinas. Originado do JavaScript, o JSON é independente de linguagem e é o padrão de facto para troca de dados na web.
O JSON representa dados como pares chave-valor organizados em objetos e arrays. Sua simplicidade o tornou o formato dominante para APIs REST, arquivos de configuração e armazenamento de dados.
Uma breve história
O JSON foi formalizado por Douglas Crockford no início dos anos 2000. A especificação foi publicada em json.org em 2001. O RFC 4627 foi publicado em 2006, e o atual padrão ECMA-404 em 2013.
Antes do JSON, o XML era o formato dominante de intercâmbio de dados na web. O minimalismo do JSON — sem atributos, instruções de processamento ou namespaces — o tornou imediatamente popular. Em 2010, o JSON havia substituído amplamente o XML para APIs web.
Tipos de dados JSON
O JSON suporta exatamente seis tipos de dados. Todo valor em um documento JSON válido deve ser um destes:
"hello world"Qualquer sequência de caracteres Unicode entre aspas duplas. Sequências de escape com barra invertida (\n, \t, \") são suportadas.
42 / 3.14 / 1e10Inteiro ou ponto flutuante. Notação científica (1e10) é permitida. Sem distinção entre int e float no nível JSON.
true / falseOs tokens literais true ou false (apenas minúsculas). Não há verdadeiro/falso — apenas booleano estrito.
nullO token literal null (minúsculas). Representa ausência de valor. Diferente de undefined, que não é um tipo JSON.
[1, "two", null]Uma lista ordenada de valores entre colchetes. Os elementos podem ser de tipos mistos e arrays podem ser aninhados arbitrariamente.
{"key": "value"}Uma coleção não ordenada de pares chave-valor entre chaves. As chaves devem ser strings. Os valores podem ser qualquer tipo JSON.
{
"string": "hello world",
"number": 42,
"float": 3.14,
"boolean": true,
"null": null,
"array": [1, 2, 3],
"object": { "nested": "value" }
}Regras de sintaxe JSON
O JSON tem regras de sintaxe estritas. Um pequeno desvio causa um erro de análise. Estas são as seis regras mais importantes:
Todos os valores de string e chaves de objeto devem usar aspas duplas. Aspas simples não são JSON válido.
O JSON não permite vírgulas finais após o último elemento em um array ou a última propriedade em um objeto.
O JSON não tem sintaxe de comentários. // e /* */ não são válidos. Para arquivos de configuração que precisam de comentários, considere JSON5 ou YAML.
O JSON suporta apenas seis tipos primitivos. Valores JavaScript como undefined, NaN, Infinity e funções não podem ser representados.
Todas as chaves de objeto devem ser strings entre aspas. Chaves numéricas ou identificadores sem aspas não são permitidos.
O JSON é sensível a maiúsculas. true, false e null devem estar em minúsculas.
JSON inválido vs. válido
{
'name': 'Alice', // single quotes — invalid
age: 30, // unquoted key — invalid
"scores": [1, 2, 3,], // trailing comma — invalid
"note": undefined // undefined — invalid
}{
"name": "Alice",
"age": 30,
"scores": [1, 2, 3],
"note": null
}JSON na web moderna
APIs REST
O JSON é o formato de corpo padrão para solicitações e respostas de API REST. Praticamente todas as linguagens de programação têm um analisador JSON integrado.
Arquivos de configuração
package.json, tsconfig.json, .eslintrc e muitas outras ferramentas de desenvolvedor usam JSON para configuração.
Bancos de dados NoSQL
Bancos de dados de documentos como MongoDB, CouchDB e Amazon DynamoDB armazenam dados como documentos JSON.
Estado e dados do frontend
localStorage e sessionStorage armazenam strings, então JSON.stringify/JSON.parse são usados constantemente para serializar objetos JavaScript.
JSON vs. outros formatos
O JSON nem sempre é a melhor escolha. Veja como ele se compara a outros formatos de dados comuns:
Sintaxe mais simples, tamanho de arquivo menor, mais fácil de analisar, mais legível
Sem suporte para atributos, instruções de processamento ou namespaces XML
Você precisa de metadados de documento, modelos de conteúdo misto ou esquemas XML
Sintaxe mais estrita (menos ambiguidade), melhor suporte de ferramentas, mais portátil
Sem suporte a comentários, ligeiramente mais verboso para dados profundamente aninhados
Arquivos de configuração editados por humanos, Docker Compose, GitHub Actions, manifestos do Kubernetes
Maior suporte de ecossistema, análise mais rápida, tratamento de tipos mais previsível
Sem tipo de data nativo, menos amigável para estruturas aninhadas complexas
Rust (Cargo.toml), Python (pyproject.toml), configuração de aplicativos estilo INI
Dados estruturados e aninhados, não limitado a linhas e colunas simples
Tamanho de arquivo muito maior, pior desempenho para dados puramente tabulares
Dados de planilha, exportações de banco de dados, dados a serem abertos no Excel ou pandas
JSON Schema
JSON Schema é um vocabulário para validar a estrutura de documentos JSON. Um esquema descreve os tipos esperados, campos obrigatórios e restrições de um valor JSON.
Ferramentas como ajv (JavaScript), jsonschema (Python) e validadores integrados em muitos IDEs suportam JSON Schema. O OpenAPI usa JSON Schema para descrever corpos de solicitação e resposta de API.
Armadilhas comuns do JSON
Os números JSON são analisados como floats de dupla precisão IEEE 754. Inteiros maiores que 2^53 perdem precisão. Passe IDs grandes como strings.
O JSON não tem tipo de data. As datas são tipicamente serializadas como strings ISO 8601 ou timestamps Unix.
JSON.stringify lança um TypeError em referências circulares de objeto. Você precisa quebrar o ciclo ou usar uma biblioteca que o trate.
O JSON deve ser codificado como UTF-8, UTF-16 ou UTF-32. Uma Marca de Ordem de Bytes (BOM) no início de um arquivo JSON não é compatível com a especificação.
Ao analisar JSON não confiável, mesclar objetos analisados pode ser vulnerável a ataques de poluição de protótipo via a chave __proto__.
{"key": null} e uma "key" ausente são semanticamente diferentes. Null significa que o campo existe com um valor ausente; ausente significa que o campo não foi especificado.
Perguntas frequentes
JSON significa JavaScript Object Notation. Apesar do nome, o JSON é completamente independente de linguagem.
Não. O JSON é um formato de texto que se parece com um literal de objeto JavaScript, mas tem regras mais estritas.
Não. A especificação JSON não inclui sintaxe de comentários. Para arquivos de configuração que precisam de comentários, considere JSONC, JSON5 ou YAML.
JSONP foi uma solução alternativa para a política de mesma origem do navegador. É obsoleto — use CORS em vez disso.
Em JavaScript: JSON.stringify(data, null, 2). Em Python: json.dumps(data, indent=2). No terminal: cat file.json | python3 -m json.tool ou cat file.json | jq .
NDJSON armazena um objeto JSON por linha, permitindo processamento em fluxo. É popular para arquivos de log e exportações de dados grandes.
O espaço em branco entre tokens é insignificante. A formatação é uma questão de estilo, não de semântica.
A especificação JSON não define limite de tamanho. Na prática, você é limitado pela memória do analisador e pela transferência de rede.
Não diretamente. Os dados binários devem ser codificados em Base64 antes de serem incorporados no JSON, o que aumenta o tamanho em ~33%.
JSON5 é um superconjunto do JSON que adiciona: chaves sem aspas, strings com aspas simples, vírgulas finais, comentários e strings multilinha. Requer um analisador separado.