Artigo Build·Desenvolvimento·12 min de leitura

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.

Vitor Morais

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:

Tipos de dados nativos do JSON (RFC 8259)
CritérioExemploEquivalente em JS / Python
string"olá"string / str
number42, 3.14, -7number / int, float
booleantrue, falseboolean / bool
nullnullnull / 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:

Comparativo rápido entre formatos de dados
CritérioJSONXMLYAML
VerbosidadeBaixaAlta (tags abre/fecha)Mais baixa (indentação)
ComentáriosNão (puro)SimSim
Tipos nativos60 (tudo é texto)Mais (datas, refs)
SchemasJSON SchemaXSD, DTDJSON Schema também serve
Caso típicoAPIs, configs, NoSQLDocumentos, SOAP, OfficeCI/CD, Kubernetes
Risco de bugsAspas e vírgulasEntidades externasIndentaçã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:00Z com timezone explícito.
  • IDs como string quando podem exceder 253.
  • Versionamento da API (/v1/) ou do schema (schemaVersion dentro 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.

#json#javascript#python#go#java#api#json schema#json5#rfc 8259#iniciantes

Continue lendo