O que é JSON? Guia Completo com Exemplos em 6 Linguagens
JSON virou a língua franca da web — APIs REST, configs, NoSQL, contratos entre microserviços. Este guia cobre a sintaxe, os 6 tipos de dados, parsing em 6 linguagens, variantes (JSON5, JSONC) e os erros mais comuns que aparecem em produção.
Por Vitor Morais
Fundador do MochaLabz ·
Formate e valide JSON online
Syntax highlighting, detecção de erros em tempo real e minificação. Tudo no seu navegador.
Usar formatador de JSON →JSON (JavaScript Object Notation) é um formato de texto leve para representar dados estruturados. Foi criado por Douglas Crockford no início dos anos 2000 e formalizado pela RFC 8259. Hoje é o padrão de fato para APIs REST, arquivos de configuração, troca de dados entre serviços e armazenamento em bancos como MongoDB ou PostgreSQL JSONB.
O que é JSON na prática
JSON é só texto. Um arquivo JSON é uma string que segue uma gramática específica e que toda linguagem moderna sabe converter para estruturas nativas (objetos, listas, números, strings). É a forma mais simples e portável de mover dados entre dois sistemas que não compartilham linguagem nem tecnologia.
Apesar do nome, JSON não é exclusivo do JavaScript. Python, Go, Java, Ruby, PHP, Rust, C#, Kotlin, Swift — todas têm parsers JSON na biblioteca padrão. Quando seu app Android conversa com o backend em Node.js, JSON é o que viaja no fio.
A sintaxe em uma única tela
A gramática do JSON cabe num cartão de visita. Veja todos os construtos no exemplo abaixo:
{
"string": "texto entre aspas duplas",
"numero": 42,
"decimal": 3.14,
"negativo": -7,
"expo": 1.5e10,
"booleano": true,
"nulo": null,
"lista": [1, 2, 3, "misturado", false],
"objeto": {
"aninhado": "valor",
"vazio": {}
},
"lista_de_objetos": [
{ "id": 1, "nome": "Ana" },
{ "id": 2, "nome": "Bruno" }
]
}Algumas regras estritas que pegam quem está começando: chaves (keys) sempre entre aspas duplas, sem vírgula depois do último elemento, sem comentários, e sem aspas simples.
Os 6 tipos de dados do JSON
A especificação define exatamente seis tipos. Tudo que você consegue representar em JSON é uma combinação destes:
| Critério | Exemplo | Equivalente em JS / Python |
|---|---|---|
| string | "olá" | string / str |
| number | 42, 3.14, -7 | number / int, float |
| boolean | true, false | boolean / bool |
| null | null | null / None |
| array | [1, 2, 3] | Array / list |
| object | {"k": 1} | Object / dict |
O que não existe em JSON: undefined,NaN, Infinity, BigInt, datas, funções, regex, símbolos, comentários. Se sua linguagem tem algum desses, você precisa serializar manualmente para um dos 6 tipos suportados (geralmente string ou número).
Cuidado com números grandes
JSON usa double-precision (64 bits) para números, com precisão segura de até 253. Para IDs maiores (snowflakes do Twitter/X, IDs do Discord, BigInt), serialize como string. Caso contrário, JavaScript pode arredondar silenciosamente.
JSON vs XML vs YAML: qual escolher
Cada formato tem seu nicho. JSON dominou web APIs por simplicidade e mapeamento direto para objetos:
| Critério | JSON | XML | YAML |
|---|---|---|---|
| Verbosidade | Baixa | Alta (tags abre/fecha) | Mais baixa (indentação) |
| Comentários | Não (puro) | Sim | Sim |
| Tipos nativos | 6 | 0 (tudo é texto) | Mais (datas, refs) |
| Schemas | JSON Schema | XSD, DTD | JSON Schema também serve |
| Caso típico | APIs, configs, NoSQL | Documentos, SOAP, Office | CI/CD, Kubernetes |
| Risco de bugs | Aspas e vírgulas | Entidades externas | Indentação invisível |
Como parsear JSON nas principais linguagens
Praticamente todas as linguagens modernas têm parsing nativo. Os padrões são parecidos: parse/loads para texto → objeto, stringify/dumps para objeto → texto.
JavaScript / Node.js
const text = '{"nome": "Ana", "idade": 30}';
// Parse: texto → objeto
const obj = JSON.parse(text);
console.log(obj.nome); // "Ana"
// Stringify: objeto → texto
JSON.stringify(obj); // '{"nome":"Ana","idade":30}'
JSON.stringify(obj, null, 2); // formatado com 2 espaços
// Replacer: filtra/transforma na serialização
JSON.stringify(obj, ['nome']); // '{"nome":"Ana"}'
// Reviver: transforma na desserialização
JSON.parse(text, (k, v) =>
typeof v === 'string' ? v.toUpperCase() : v
);Python
import json
text = '{"nome": "Ana", "idade": 30}'
# Parse
obj = json.loads(text)
print(obj['nome']) # "Ana"
# Stringify
json.dumps(obj) # '{"nome": "Ana", "idade": 30}'
json.dumps(obj, indent=2, ensure_ascii=False)
# Arquivos
with open('dados.json') as f:
obj = json.load(f)
with open('out.json', 'w') as f:
json.dump(obj, f, indent=2)Go
import "encoding/json"
type Pessoa struct {
Nome string `json:"nome"`
Idade int `json:"idade"`
}
// Unmarshal: bytes → struct
var p Pessoa
json.Unmarshal([]byte(text), &p)
// Marshal: struct → bytes
data, _ := json.Marshal(p)
indented, _ := json.MarshalIndent(p, "", " ")Java (Jackson)
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
// Parse
Pessoa p = mapper.readValue(text, Pessoa.class);
// Stringify
String json = mapper.writeValueAsString(p);
String pretty = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(p);PHP
$text = '{"nome": "Ana", "idade": 30}';
// Parse — true para array assoc, false (default) para objeto
$arr = json_decode($text, true);
echo $arr['nome']; // "Ana"
// Stringify
echo json_encode($arr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);Ruby
require 'json'
text = '{"nome": "Ana", "idade": 30}'
# Parse
obj = JSON.parse(text)
puts obj['nome'] # "Ana"
# Stringify
JSON.generate(obj)
JSON.pretty_generate(obj)JSON5, JSONC e outras variantes
O JSON puro não permite comentários nem flexibilidades de formatação. Para arquivos de configuração lidos por humanos, existem variantes mais permissivas:
- JSONC (JSON with Comments) — usado pelo VS Code em
tsconfig.json,settings.json. Permite//e/* */, mas o resto é JSON estrito. - JSON5 — superset com aspas simples, chaves sem aspas, vírgula final, comentários, hexadecimal, infinito e valores especiais. Comum em ferramentas de build (Babel, Webpack).
- NDJSON / JSON Lines — um objeto JSON por linha do arquivo, ótimo para streaming de logs e datasets grandes.
- JSONB (PostgreSQL) — JSON em formato binário otimizado para indexação e consulta.
Regra prática
Para APIs públicas e contratos: JSON estrito. Para arquivos de configuração lidos por humanos: JSONC. Para datasets em larga escala e logs: NDJSON. Para queries no Postgres: JSONB.
Os erros mais comuns (e como evitar)
Os parsers JSON são rigorosos por design. Os tropeços que mais aparecem em produção:
// ❌ Aspas simples em chaves ou valores
{ 'nome': 'Ana' }
// ❌ Vírgula sobrando no último item
{ "lista": [1, 2, 3,] }
// ❌ Chaves sem aspas
{ nome: "Ana" }
// ❌ Comentários
{ "x": 1, // não permitido
"y": 2 }
// ❌ Caractere de controle não escapado
{ "txt": "linha 1
linha 2" }
// ❌ Number como string em campo numérico
{ "idade": "30" } // valida sintaxe, mas quebra schemas tipados
// ✅ Tudo certo
{ "nome": "Ana",
"lista": [1, 2, 3],
"txt": "linha 1\nlinha 2" }JSON Schema: validando o contrato
JSON resolve a sintaxe, mas não a semântica. Para garantir que o payload tem os campos certos, com tipos certos e dentro dos limites, use JSON Schema (ou Zod no TypeScript, Pydantic no Python, Marshmallow). Veja o guia completo de JSON Schema para validar dados.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["nome", "idade"],
"properties": {
"nome": { "type": "string", "minLength": 1 },
"idade": { "type": "integer", "minimum": 0 },
"email": { "type": "string", "format": "email" }
},
"additionalProperties": false
}Boas práticas para APIs em JSON
- Nomes consistentes: escolha uma convenção (camelCase ou snake_case) e siga em todo o projeto.
- UTF-8 sempre: sem BOM, com
Content-Type: application/json; charset=utf-8. - Timestamps em ISO 8601:
2026-04-19T10:30:00Zcom timezone explícito. - IDs como string quando podem exceder 253.
- Versionamento da API (
/v1/) ou do schema (schemaVersiondentro do JSON). - Minifique em produção, formate em logs. Veja minificação de JSON e impacto em performance.
- Limite o tamanho: defina max payload no servidor para evitar DoS.
- Schema na borda: valide qualquer JSON que entre no sistema, antes de passar adiante.
Perguntas frequentes
O que significa JSON e para que ele serve?+
JSON significa JavaScript Object Notation. É um formato de texto leve para representar dados estruturados — objetos com pares chave-valor, listas e tipos primitivos. Hoje é o padrão de fato para APIs REST, arquivos de configuração (package.json, tsconfig.json), troca de dados entre microserviços e armazenamento de documentos em bancos NoSQL como MongoDB.
JSON é a mesma coisa que JavaScript?+
Não. JSON nasceu de uma sintaxe parcial do JavaScript, mas é completamente independente. Toda linguagem moderna (Python, Java, Go, Ruby, PHP, Rust, C#) tem suporte nativo para parsear e gerar JSON. O nome carrega o histórico, mas o formato é universal.
Quais tipos de dados o JSON suporta?+
JSON suporta exatamente 6 tipos: string (entre aspas duplas), number (inteiro ou ponto flutuante), boolean (true/false), null, array (lista entre [ ]) e object (pares chave:valor entre { }). Não existem datas, undefined, funções, símbolos, BigInt nem comentários no JSON puro.
Posso colocar comentários em um arquivo JSON?+
JSON puro não permite comentários. Para configurações que precisam de comentários, use JSONC (JSON with Comments — usado pelo VS Code) ou JSON5 (extensão mais permissiva). Ambos exigem parsers específicos: APIs e contratos públicos devem permanecer em JSON estrito.
Por que meu JSON.parse() está falhando?+
Os erros mais comuns são: aspas simples em vez de duplas; vírgula sobrando no último elemento de array/objeto; chaves sem aspas; comentários no meio; caracteres de controle não escapados; encoding incorreto (use sempre UTF-8). Cole no nosso formatador para identificar a posição exata do erro.
Como representar datas em JSON?+
JSON não tem tipo de data nativo. A convenção mais robusta é serializar como string ISO 8601 (ex: "2026-04-19T10:30:00Z") e converter de volta para objeto Date no parsing. Evite timestamps Unix em milissegundos: ficam ilegíveis e perdem timezone.
Qual a diferença entre JSON e XML?+
JSON é mais compacto (menos overhead), mais fácil de ler por humanos e mapeia diretamente para estruturas nativas das linguagens (objetos e arrays). XML suporta atributos, namespaces, schemas (XSD) e comentários, sendo mais adequado para documentos complexos com metadados ricos. Para APIs web modernas, JSON venceu.
JSON é seguro? Posso confiar em JSON recebido de fora?+
JSON é só dados — não executa código (diferente de XML com entidades externas, ou eval em JavaScript). Mas valide sempre: tamanho máximo, tipos esperados (use JSON Schema, Zod ou Yup), e nunca passe JSON cru para eval(). Para dados sensíveis, combine com TLS e autenticação adequada.
Continue lendo
JSON vs CSV (2026): Quando Usar Cada Formato e Como Converter
Comparativo completo JSON vs CSV: diferenças técnicas, performance, casos de uso, limitações, parquet como alternativa e código de conversão entre os formatos.
JSON Schema: Como Validar e Documentar Dados (Guia Completo 2026)
JSON Schema é o padrão para validar estrutura de JSON em APIs e configs. Aprenda Draft 2020-12, validação com AJV e Pydantic, integração com OpenAPI/Swagger, geração de tipos TypeScript e comparativo com Zod, Yup e Joi.
Minificar JSON: Performance Real, Compressão e Quando Vale (2026)
Quando minificar JSON faz diferença real, impacto na performance de APIs, gzip vs brotli vs zstd, alternativas binárias (MessagePack, CBOR, Protobuf) e benchmarks honestos.
Como Converter JSON para CSV em JavaScript (2026): Guia Completo com Código
Guia definitivo de conversão JSON → CSV em JavaScript: abordagens manuais, PapaParse, edge cases com arrays aninhados, encoding UTF-8 com BOM e exemplos prontos em Node.js e browser.