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 vocabulario para validar documentos JSON
JSON Schema e uma especificacao do IETF que permite descrever a estrutura, os tipos e as restricoes 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 configuracao, filas de mensagens e sistemas de plug-in SaaS. A referencia canonica esta em json-schema.org.
Um schema e um objeto JSON cujas palavras-chave descrevem como um documento valido deve ser: quais chaves sao obrigatorias, que tipos cada valor aceita, se strings combinam com regex, se numeros 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 especificacao: do Draft 4 ao 2020-12
O JSON Schema teve varias 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 resolucao de
$refe a validacao 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 vocabulario 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 — restricoes de string; pattern aceita regex ECMA-262.
- minimum, maximum, exclusiveMinimum, multipleOf — intervalos numericos.
- 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 vocabulario de format-assertion seja ativado. - $ref + $defs — reuso de subschemas (evita copia e cola).
Bibliotecas e desempenho em tempo de execucao
Existem implementacoes em todas as linguagens populares:
- AJV (Node, TypeScript) — o validador mais popular. Compila o schema uma vez para uma funcao JavaScript especializada, atingindo cerca de 1 milhao de validacoes por segundo.
- jsonschema e fastjsonschema (Python) — o primeiro interpreta; o segundo emite codigo Python e roda ate 10x mais rapido.
- Everit JSON Schema e NetworkNT (Java) — prontos para producao 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 mao porque se especializam para o schema exato e dispensam dispatch dinamico.
Casos de uso alem de contratos de API
- Validacao de request e response — OpenAPI 3.1 embute JSON Schema 2020-12 em cada payload.
- Arquivos de configuracao — Kubernetes CRDs, GitHub Actions workflows e VS Code settings tem schemas para autocompletar e alertar no editor.
- Geracao de formularios —
react-jsonschema-formmonta forms diretamente do schema. - Validacao em banco — MongoDB (via JSON Schema validator) e Mongoose impoem o formato nas escritas.
- Geracao 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 sao validadores TypeScript-first em tempo de execucao, com APIs encadeadas e binding direto aos tipos do TS. JSON Schema, ao contrario, e agnostico de linguagem e serializavel: o mesmo schema valida payloads em Node, Python, Go e Rust e trafega pela rede ate o cliente. Tipos TypeScript existem so em tempo de compilacao e desaparecem em runtime, entao nao protegem entradas nao 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 usuario, endereco 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 multiplos drafts, tipos TypeScript e ecossistema robusto (Fastify, ESLint e NestJS dependem dele).
Qual a diferenca 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 nao 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 nao rejeita campos extras?
Porque additionalProperties e true por padrao. Defina como false (ou como um schema) em cada objeto que voce 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.