Pular para o conteúdo principal

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.

Só local

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.

TipoExemplosRegra que vale lembrar
string"hello", "café", "é"Somente aspas duplas; escape " e \ dentro
number42, -3.14, 2.1e10Sem hexadecimal, sem NaN, sem zeros à esquerda
booleantrue, falseSomente minúsculas — True é inválido
nullnullSignifica 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)