O que é JSON
JSON (JavaScript Object Notation) é um formato de texto para dados estruturados, definido pela RFC 8259. Ele representa objetos como pares chave/valor e listas como arrays, usando seis caracteres de pontuação e um sistema de tipos rigoroso. Toda API web, ferramenta de configuração e banco de dados de hoje consegue lê-lo — e ele é deliberadamente simples o bastante para se aprender em uma tarde.
O que é JSON: explicação
JSON é o formato em que os dados chegam. Quando um aplicativo de clima mostra a previsão de amanhã, uma planilha exporta registros ou um arquivo de configuração acompanha um serviço, o texto que circula entre esses sistemas é quase sempre JSON: pares de chave e valor entre chaves, listas entre colchetes e um pequeno conjunto de regras sobre strings e números com o qual toda linguagem de programação concorda.
Ele foi extraído da sintaxe de literais de objeto do JavaScript por volta de 2001 e padronizado primeiro como RFC 4627, depois revisado como RFC 8259, que é a versão em vigor hoje junto com o padrão idêntico ECMA-404. O nome ainda diz JavaScript, mas o formato é neutro em relação a linguagens por design — Python, Java, Go, C#, SQL e seu editor de texto todos o falam fluentemente, e é precisamente por isso que ele se tornou a forma padrão de programas trocarem dados.
Este guia explica do que o JSON realmente é feito — seus seis tipos de dados, seus dois contêineres, suas regras de escape — com exemplos copiáveis para cada um. Sempre que uma explicação leva a um próximo passo prático, a ferramenta vinculada roda no seu navegador: você pode formatar, validar ou converter o próprio exemplo que acabou de ler, sem instalar nada.
A maneira mais rápida de interiorizar as regras de sintaxe abaixo é quebrá-las de propósito e ver como um parser reage — o Formatador de JSON mostrará a linha e a coluna exatas de cada erro.
Quando você quiser todas as regras em uma única página de referência, a cola de sintaxe do JSON comprime este guia em uma tabela de consulta.
Os dois contêineres: objetos e arrays
Tudo no JSON é construído a partir de duas estruturas. Um objeto é um conjunto não ordenado de pares chave/valor envolto em chaves — as chaves dos pares são sempre strings, os valores podem ser qualquer valor JSON e os pares são separados por vírgulas. Um array é uma lista ordenada de valores envolta em colchetes, e seus valores podem misturar tipos à vontade.
Um objeto (pares chave/valor)
{
"name": "Ada Lovelace",
"born": 1815,
"mathematician": true
}Um array (valores ordenados)
[ "analytical engine", 1843, null ]
Os seis tipos de dados
Quatro são escalares — string, número, booleano e null — e dois são os contêineres acima. As regras que surpreendem iniciantes são poucas, porém rígidas: strings estão sempre entre aspas duplas (aspas simples são inválidas), números não precisam de aspas e não podem ser escritos em hexadecimal, booleanos são exatamente os tokens minúsculos true e false, e null é um valor próprio que significa vazio deliberado.
| Tipo | Exemplos | Regra que vale lembrar |
|---|---|---|
| string | "hello", "café", "é" | Somente aspas duplas; escape " e \ dentro |
| number | 42, -3.14, 2.1e10 | Sem hexadecimal, sem NaN, sem zeros à esquerda |
| boolean | true, false | Somente minúsculas — True é inválido |
| null | null | Significa vazio intencional, não zero |
| object | {"key": "value"} | Chaves são strings; vírgulas finais proibidas |
| array | [1, "two", null] | Ordem preservada; misturas permitidas |
Escape: o que pode viver dentro de uma string
Dentro de uma string, dois caracteres precisam ser escapados onde quer que apareçam: a aspa dupla (como ") e a barra invertida (como \). Existem mais seis escapes para caracteres de controle — \n para nova linha, \t para tabulação, \r para retorno de carro, \b para backspace, \f para form feed e \/ para a barra normal, o que é válido, mas opcional. Qualquer outro caractere pode aparecer literalmente como UTF-8, ou como um escape \uXXXX para seu ponto de código Unicode — as duas formas significam exatamente a mesma string para um parser.
Forma escapada
"path": "C:\\Users\\ada" "quote": "she said \"hi\"" "emoji": "\ud83d\ude00"
O que um parser entrega
path: C:\Users\ada quote: she said "hi" emoji: 😀
Espaço em branco, formatação e por que a formatação existe
Entre a pontuação estrutural, o JSON permite exatamente quatro caracteres de espaço em branco: espaço, tabulação, nova linha e retorno de carro. Essa permissão é o que torna a formatação possível — o mesmo documento pode ser uma linha ilegível na rede e uma árvore indentada no seu editor, e ambos são byte a byte os mesmos dados para um parser. Formatar não muda nada no significado, razão pela qual a ferramenta formatadora é segura de rodar com qualquer payload e por que o JSON minificado é a escolha padrão para transporte.
- Sem comentários: a RFC 8259 removeu comentários deliberadamente, depois de divergências reais entre parsers. JSONC é a extensão não oficial que algumas ferramentas aceitam.
- Sem vírgulas finais: [1, 2, 3,] é inválido, por mais amigável que pareça.
- Chaves duplicadas: os parsers mantêm a primeira ou a última — a RFC 8259 deixa isso a critério das implementações, e é por isso que duplicatas são um bug mesmo onde o parser as aceita.
- Qualquer nível superior: qualquer valor pode ser um documento inteiro — um array de números é JSON completo.
Onde o JSON é usado — e onde não é
O JSON domina três territórios: corpos de requisição e resposta de APIs, configuração estruturada onde comentários não fazem falta e dados em repouso em bancos de dados de documentos. Ele divide a rede de má vontade com dois vizinhos — formatos binários como protobuf, que vencem em tamanho e velocidade quando os dois lados compartilham um schema, e YAML, que vence na facilidade de edição manual para configuração de ops. Entender JSON a fundo, portanto, não é mais uma habilidade entre tantas; é o pré-requisito para ler esses dois vizinhos, porque o YAML 1.2 faz parse de JSON e a maioria dos schemas binários se documenta com exemplos em JSON.
Perguntas frequentes
O que significa a sigla JSON?
JavaScript Object Notation. A sintaxe foi extraída dos literais de objeto do JavaScript por Douglas Crockford por volta de 2001, mas o formato em si é neutro em relação a linguagens: a RFC 8259 o define como um formato de texto que qualquer linguagem de programação pode emitir e fazer parse, e é por isso que ele se tornou o formato universal de intercâmbio, e não uma funcionalidade do JavaScript.
JSON é uma linguagem de programação?
Não — é um formato de dados sem semântica de execução. Ele não consegue expressar lógica, variáveis ou funções, apenas estrutura: objetos, arrays e quatro tipos escalares. O rigor é deliberado; a gramática da RFC 8259 cabe em cerca de uma página, e é essa propriedade que permitiu que toda linguagem a implementasse de forma idêntica.
Qual é a diferença entre JSON e objetos JavaScript?
Três diferenças visíveis: o JSON exige chaves entre aspas duplas, proíbe vírgulas finais e não tem undefined, funções nem comentários. Um literal de objeto JavaScript como {name: 'ada'} não é JSON válido — {"name":"ada"} é. Em contrapartida, todo documento JSON válido faz parse como objeto JavaScript, e é por isso que os dois são tão frequentemente confundidos.
Por que o JSON não permite comentários?
Douglas Crockford os removeu deliberadamente: negociações iniciais do formato mostraram fornecedores enfiando diretivas de parse em comentários, o que quebrava a interoperabilidade. Se você precisa de anotação, a convenção é uma chave irmã como "//" ou "_comment", ou JSONC onde a toolchain suporta — mas o JSON que trafega na rede permanece sem comentários por design.
Como verifico se meu JSON é válido?
Cole-o em um validador — o validador de JSON deste site faz parse contra a RFC 8259 localmente e informa a linha e a coluna exatas do primeiro erro de sintaxe, no seu navegador. Falhas comuns são aspas simples, vírgulas finais, chaves sem aspas e aspas tipográficas coladas de um processador de texto.
É seguro fazer parse de JSON?
Fazer parse de texto JSON é seguro; o que um parser entrega a você ainda pode ser perigoso se você executar. Duas armadilhas clássicas: usar o eval do JavaScript em vez de JSON.parse (o eval executa código) e expansão de entidade sem limites em ferramentas influenciadas por XML. Um parser compatível com os padrões, como os dos navegadores, tem limites de profundidade e tamanho e nunca executa nada.
Onde posso ler os padrões citados aqui?
- RFC 8259 — O formato de intercâmbio de dados JavaScript Object Notation (JSON)
- RFC 4627 — O tipo de mídia application/json para JavaScript Object Notation (JSON) (obsoleta; o padrão JSON atual é a RFC 8259)
- ECMA-404 — A sintaxe de intercâmbio de dados JSON
- YAML 1.2 — Especificação do YAML, versão 1.2 (revisão 1.2.2)
Quais ferramentas relacionadas devo usar a seguir?
- Formatar JSONIndenta, ordena chaves e remove comentáriosAbrir
- Validar JSONAponta o erro com linha e coluna e corrige num cliqueAbrir
- Cola de sintaxe JSONGuia em linguagem simplesAbrir
- Converter JSON em CSVTransforma registros em planilha, mesmo aninhadosAbrir
- Escape de JSONGuia em linguagem simplesAbrir
- JSON vs YAMLComparação lado a ladoAbrir