O que é JSON? Guia completo para iniciantes

Tudo o que você precisa saber sobre JSON — o formato de dados da web moderna — da sintaxe ao uso em APIs.

Equipe JSONTech15 de janeiro de 20258 min

JSON em 30 segundos

JSON (JavaScript Object Notation) é um formato de dados leve e baseado em texto que se tornou a língua franca da troca de dados na web. Se você já chamou uma API REST, abriu um arquivo package.json ou trabalhou com MongoDB, você já usou JSON — provavelmente sem pensar muito nisso.

Em sua essência, JSON é apenas uma maneira de representar dados estruturados como texto simples. É legível por humanos (na maioria das vezes), facilmente analisável por máquinas e suportado por praticamente todas as linguagens de programação existentes. Essa combinação é exatamente o que o fez triunfar.

Uma breve história

JSON foi popularizado por Douglas Crockford no início dos anos 2000. Ele não "inventou" realmente — a sintaxe é um subconjunto do JavaScript que existe desde 1999 — mas ele deu um nome, um site (json.org) e uma especificação. Às vezes, a marca importa mais do que a invenção.

O formato foi formalmente especificado na RFC 4627 (2006) e posteriormente substituído pela RFC 8259 (2017) e pelo padrão ECMA-404. Mas, honestamente, a especificação não mudou muito desde o início. A simplicidade do JSON é sua maior força — simplesmente não há muito o que mudar.

Antes do JSON dominar, o XML era o formato de intercâmbio de dados dominante. Se você quer ver por que os desenvolvedores se voltaram para o JSON, confira nossa comparação JSON vs XML.

Os 6 tipos de dados JSON

JSON suporta exatamente seis tipos de dados. Nem mais, nem menos. Essa restrição é intencional — mantém as coisas simples e interoperáveis entre as linguagens.

TipoDescriçãoExemplo
StringTexto envolto em aspas duplas"hello world"
NumberInteiro ou ponto flutuante (sem hex, sem NaN, sem Infinity)42, 3.14, -7
BooleanLiteral true ou falsetrue
NullRepresenta um valor vazio ou desconhecidonull
ObjectColeção não ordenada de pares chave-valor{"name": "Ada"}
ArrayLista ordenada de valores[1, 2, 3]

Note o que não está na lista: datas, funções, indefinido, comentários ou dados binários. JSON não suporta nenhum desses nativamente. Datas são tipicamente passadas como strings ISO 8601 ("2025-01-15T10:30:00Z"), e dados binários são codificados em Base64. É um pouco irritante, mas mantém o formato universal.

Regras de sintaxe JSON

A sintaxe do JSON é rigorosa. Vindo do JavaScript, você pode tropeçar em algumas dessas regras. Aqui estão elas, sem rodeios:

  • As chaves devem ser strings entre aspas duplas. Aspas simples não funcionam. Chaves não entre aspas não funcionam. Isso não é JavaScript.
  • As strings devem usar aspas duplas. 'hello' é JSON inválido. "hello" é válido.
  • Sem vírgulas finais. Aquela última vírgula após a última propriedade? JSON diz não.
  • Sem comentários. Esta é provavelmente a decisão de design mais controversa do JSON. Douglas Crockford as removeu deliberadamente para evitar abusos.
  • Sem raiz de valor único (nas especificações mais antigas). A RFC 8259 agora permite qualquer valor JSON como raiz, mas muitos analisadores ainda esperam um objeto ou array.

Aqui está um documento JSON válido:

{
  "name": "Grace Hopper",
  "age": 85,
  "languages": ["COBOL", "FORTRAN"],
  "retired": true,
  "spouse": null,
  "address": {
    "city": "Arlington",
    "state": "VA"
  }
}

E aqui está o que o quebra:

{
  name: "Grace Hopper",     // ❌ Chave não entre aspas
  'age': 85,                // ❌ Chave entre aspas simples
  "languages": ["COBOL",],  // ❌ Vírgula final
  // Este é um comentário      // ❌ Comentários não permitidos
}

Tem JSON inválido? Cole-o em nosso Formatador JSON para identificar instantaneamente erros de sintaxe e corrigir automaticamente problemas comuns, como vírgulas finais.

JSON vs objetos JavaScript

Isso confunde quase todo desenvolvedor JavaScript em algum momento. JSON se parece com um literal de objeto JS, mas não são a mesma coisa. Aqui está onde eles divergem:

RecursoJSONObjeto JavaScript
ChavesDevem ser strings entre aspas duplasPodem ser identificadores não entre aspas, símbolos ou computados
StringsApenas aspas duplasAspas simples, aspas duplas ou crases
Vírgulas finaisNão permitidasPermitidas
ComentáriosNão permitidosPermitidos
ValoresStrings, números, booleanos, null, objetos, arraysTodos os acima, além de funções, indefinido, Date, RegExp, etc.
MétodosNão suportadosSuportados
UsoFormato de intercâmbio de dados (texto)Estrutura de dados em memória

Na prática, você converte entre eles com JSON.parse() e JSON.stringify():

// String → Objeto
const data = JSON.parse('{"name": "Ada", "year": 1843}');
console.log(data.name); // "Ada"

// Objeto → String
const json = JSON.stringify({ name: "Ada", year: 1843 });
console.log(json); // '{"name":"Ada","year":1843}'

// Impressão formatada com indentação de 2 espaços
const pretty = JSON.stringify(data, null, 2);

Casos de uso comuns

1. APIs REST

Este é o ponto forte do JSON. A grande maioria das APIs web modernas envia e recebe JSON. Quando você fetch() dados de um servidor, você quase certamente está recebendo JSON de volta:

const response = await fetch("https://api.example.com/users/1");
const user = await response.json();
// { "id": 1, "name": "Alice", "email": "alice@example.com" }

2. Arquivos de configuração

package.json, tsconfig.json, .eslintrc.json, composer.json — a lista continua. JSON está em toda parte nas ferramentas de desenvolvimento. A falta de comentários é genuinamente dolorosa aqui, razão pela qual algumas ferramentas suportam JSON5 ou JSONC (JSON com Comentários) como alternativas.

3. Bancos de dados NoSQL

MongoDB armazena documentos como BSON (Binary JSON). CouchDB usa JSON puro. DynamoDB, Firestore e muitos outros usam estruturas semelhantes ao JSON. Se você está trabalhando com um banco de dados de documentos, você está trabalhando com JSON.

4. Armazenamento local e gerenciamento de estado

O localStorage do navegador armazena apenas strings, então serializar o estado em JSON é a abordagem padrão:

// Salvar
localStorage.setItem("prefs", JSON.stringify({ theme: "dark", lang: "en" }));

// Carregar
const prefs = JSON.parse(localStorage.getItem("prefs") ?? "{}");

5. Troca de dados entre microsserviços

Filas de mensagens (RabbitMQ, Kafka), webhooks e comunicação entre serviços dependem fortemente do JSON. Não é sempre a escolha mais eficiente para cenários de alta taxa de transferência (Protobuf e MessagePack são mais rápidos), mas é a mais depurável.

Melhores práticas JSON

Após anos trabalhando com JSON diariamente, aqui estão os hábitos que recomendo desenvolver:

  1. Use convenções de nomenclatura consistentes. Escolha camelCase ou snake_case para chaves e mantenha isso em toda a sua API. Misturá-las é um caminho rápido para bugs.
  2. Valide cedo. Não confie no JSON recebido cegamente. Use validação de JSON Schema para capturar dados malformados antes que cheguem à sua lógica de negócios.
  3. Mantenha a aninhamento raso. Se seu JSON tiver mais de 3–4 níveis de profundidade, considere achatá-lo. Estruturas profundamente aninhadas são difíceis de consultar, difíceis de ler e difíceis de diferenciar.
  4. Use arrays para listas, objetos para registros. Parece óbvio, mas já vi pessoas usarem objetos com chaves numéricas em string ({"0": "a", "1": "b"}) em vez de arrays. Não faça isso.
  5. Prefira null a chaves ausentes quando um campo não tiver valor. Isso torna o esquema explícito e evita ambiguidade sobre se um campo foi intencionalmente omitido.
  6. Formate para humanos durante o desenvolvimento. JSON minificado economiza bytes, mas mata a legibilidade. Use impressão bonita ao depurar, minifique ao enviar. Nosso Minificador JSON cuida do último.

Experimente você mesmo: Cole qualquer JSON em nosso Formatador JSON para validar, formatar e explorar sua estrutura instantaneamente com destaque de sintaxe e visualização em árvore.

E quanto ao JSON5 e JSONC?

Se a rigidez do JSON te incomoda, você não está sozinho. Duas extensões populares relaxam as regras:

  • JSON5 permite strings entre aspas simples, vírgulas finais, comentários, chaves não entre aspas e mais. É ótimo para arquivos de configuração onde os humanos são o público principal.
  • JSONC (JSON com Comentários) é uma extensão mínima usada por configurações do VS Code e TypeScript. Adiciona apenas suporte a comentários — nada mais.

Nenhuma dessas é JSON válido, no entanto. Se você está construindo uma API ou trocando dados entre sistemas, fique com o JSON padrão. Use extensões apenas onde as ferramentas suportam explicitamente.

Conclusão

O JSON teve sucesso não porque é perfeito, mas porque é bom o suficiente para quase tudo e extremamente simples de trabalhar. Seu sistema de tipos limitado é frustrante às vezes (onde estão minhas datas?), e a regra de não ter comentários é um verdadeiro ponto de dor. Mas essas restrições também são o que o torna universalmente interoperável.

Se você está apenas começando, a melhor maneira de aprender JSON é trabalhar com ele na prática. Tente colar alguns dados em nossas ferramentas, quebre as coisas de propósito e veja o que acontece. Entender as mensagens de erro é metade da batalha.

Continue explorando:

Ferramentas relacionadas