Validador de JSON contra Schema
Cole um JSON Schema e um documento; veja se o documento valida e quais erros aparecem (path + mensagem).
Suporta type, required, properties (recursivo), enum, minLength, maxLength, minimum, maximum e items.
JSON Schema: um vocabulário para validar documentos JSON
JSON Schema e uma especificação do IETF que permite descrever a estrutura, os tipos e as restrições de qualquer documento JSON usando JSON. Surgiu como rascunho da comunidade por volta de 2010 e hoje e a linguagem de contrato de fato para APIs REST, arquivos de configuração, filas de mensagens e sistemas de plug-in SaaS. A referência canônica esta em json-schema.org.
Um schema e um objeto JSON cujas palavras-chave descrevem como um documento válido deve ser: quais chaves são obrigatorias, que tipos cada valor aceita, se strings combinam com regex, se números caem em um intervalo etc. Um validador percorre schema e documento em paralelo, devolvendo um veredito e uma lista de violacoes com caminhos JSON Pointer.
Drafts da especificação: do Draft 4 ao 2020-12
O JSON Schema teve várias revisoes, cada uma com pequenas incompatibilidades. Saber a qual draft um schema pertence e essencial:
- Draft 4 (legado, 2013) — ainda comum em toolchains antigas de Swagger 2.0 / OpenAPI 2; usa
ide"required": ["x"]na raiz. - Draft 6 (2017) — introduziu
const,examplese renomeouidpara$id. - Draft 7 (2018) — adicionou
if/then/else,readOnly/writeOnlyecontentEncoding. Ponto de maior maturidade de ferramentas. - Draft 2019-09 — dividiu o spec em vocabularios, substituiu
definitionspor$defse adicionouunevaluatedProperties. - Draft 2020-12 (atual) — usado pelo OpenAPI 3.1; reformulou a resolução de
$refe a validação de tuplas viaprefixItems.
Declare sempre o dialeto com $schema para que o validador aplique as regras certas:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["name"]
}
Keywords essenciais que todo autor deve conhecer
O vocabulário e extenso, mas um subconjunto cobre quase tudo no dia a dia:
- type — restringe a
string,number,integer,boolean,array,objectounull. - properties + required — formato do objeto e chaves obrigatorias.
- minLength, maxLength, pattern — restrições de string; pattern aceita regex ECMA-262.
- minimum, maximum, exclusiveMinimum, multipleOf — intervalos numéricos.
- enum e const — conjuntos fechados de valores permitidos.
- oneOf, anyOf, allOf, not — combinadores logicos.
- format — pistas semanticas (
email,uri,uuid,date-time); opcional no 2020-12 a menos que o vocabulário de format-assertion seja ativado. - $ref + $defs — reuso de subschemas (evita copia e cola).
Bibliotecas e desempenho em tempo de execução
Existem implementações em todas as linguagens populares:
- AJV (Node, TypeScript) — o validador mais popular. Compila o schema uma vez para uma função JavaScript especializada, atingindo cerca de 1 milhão de validações por segundo.
- jsonschema e fastjsonschema (Python) — o primeiro interpreta; o segundo emite código Python e roda até 10x mais rápido.
- Everit JSON Schema e NetworkNT (Java) — prontos para produção em stacks JVM.
- jsonschema (Rust) e boon — alta performance via binarios nativos.
Em hot paths, validadores JIT como o AJV superam if/else feito a mão porque se especializam para o schema exato e dispensam dispatch dinâmico.
Casos de uso além de contratos de API
- Validação de request e response — OpenAPI 3.1 embute JSON Schema 2020-12 em cada payload.
- Arquivos de configuração — Kubernetes CRDs, GitHub Actions workflows e VS Code settings tem schemas para autocompletar e alertar no editor.
- Geração de formulários —
react-jsonschema-formmonta forms diretamente do schema. - Validação em banco — MongoDB (via JSON Schema validator) e Mongoose impoem o formato nas escritas.
- Geração de tipos —
json-schema-to-typescriptemite interfaces TS;quicktypeexporta para dezenas de linguagens.
JSON Schema vs Zod, Yup e TypeScript
Zod, Yup, io-ts e Valibot são validadores TypeScript-first em tempo de execução, com APIs encadeadas e binding direto aos tipos do TS. JSON Schema, ao contrário, e agnostico de linguagem e serializavel: o mesmo schema valida payloads em Node, Python, Go e Rust e trafega pela rede até o cliente. Tipos TypeScript existem so em tempo de compilacao e desaparecem em runtime, então não protegem entradas não confiaveis. Muitas equipes combinam os dois: definem em JSON Schema e derivam tipos TS com json-schema-to-typescript.
Armadilhas e boas praticas
- Defina
additionalProperties: falsequando os payloads precisarem ser estritos — o default aceita chaves extras silenciosamente. - Prefira
$defs+$refa duplicacao; reuse shapes de usuário, endereço e dinheiro entre endpoints. - Use
examplescom generosidade — eles alimentam o Swagger UI e os fixtures de contract testing. - Fixe o draft com
$schemapara evitar drift quando o AJV for atualizado. - Trate o caminho do erro como contrato com clientes (
/users/0/email).
FAQ
Qual validador e o melhor para Node?
AJV e a escolha de fato — alta performance, suporte a múltiplos drafts, tipos TypeScript e ecossistema robusto (Fastify, ESLint e NestJS dependem dele).
Qual a diferença para tipos TypeScript?
TypeScript checa em tempo de compilacao e os tipos somem em runtime. JSON Schema atua em runtime e e a ferramenta certa para validar entradas não confiaveis (HTTP, configs, mensagens de fila).
Posso reutilizar subschemas entre arquivos?
Sim. Defina em $defs e referencie com $ref, local (#/$defs/User) ou remoto (https://api.example.com/schemas/user.json). O AJV pre-carrega schemas remotos via addSchema().
OpenAPI 3.1 usa JSON Schema?
Sim — OpenAPI 3.1 esta totalmente alinhado com JSON Schema Draft 2020-12. O OpenAPI 3.0 anterior usava um subset que divergia em detalhes irritantes (nullable, formats de integer).
Por que meu schema não rejeita campos extras?
Porque additionalProperties e true por padrão. Defina como false (ou como um schema) em cada objeto que você quer selar.
Ferramentas Relacionadas
Validador de CNPJ Alfanumérico
Valida CNPJ no novo formato alfanumérico (IN RFB 2.119/2022): 12 caracteres alfanuméricos + 2 dígitos verificadores via mod-11.
Validador de ICCID (Chip SIM)
Valide o ICCID (Integrated Circuit Card Identifier) de chips SIM (19-20 dígitos) com checagem do dígito Luhn e identificação da operadora.
Validador de Endereço Solana
Valide o formato de um endereço de carteira Solana (SOL), de 32 a 44 caracteres Base58. Confira o endereço antes de enviar a sua criptomoeda e evite perdas.
Validador CEP (UF Implícita)
Valide um CEP e descubra o estado (UF) correspondente pelas faixas oficiais dos Correios. Útil para preencher endereços, conferir cadastros e cálculos de frete.
Validador IATA Aeroporto (lista ampla)
Valida códigos IATA de aeroporto (3 letras) contra uma lista ampla de ~120 dos principais aeroportos globais com nome e país.
Validador Número de Agência Bancária
Valide o formato de uma agência bancária brasileira (4 dígitos, com DV opcional). Útil para cadastros, boletos e conferência de dados bancários.