O que esta ferramenta faz
Valida um documento JSON contra um JSON Schema, devolvendo "válido" ou uma lista de erros com o caminho exato da instância e o caminho do schema para cada falha. Suporta Draft-07 e Draft 2020-12, autodetetados a partir do campo $schema do schema, com substituição manual. Verificações de formato (email, uri, date-time, uuid, etc.) estão ativadas.
Quando usar
- Desenhar um schema novo e experimentá-lo contra payloads representativos.
- Diagnosticar porque é que a tua API rejeitou um pedido — o corpo corresponde mesmo à documentação?
- Verificar que um ficheiro de configuração segue o schema da equipa antes de submeter.
- Migrar entre Draft-07 e 2020-12 e verificar que nada partiu.
Como funciona
Por baixo isto usa o Ajv (o validador de JSON Schema por trás da maioria das ferramentas JS), fixado em modo all-errors para veres todos os problemas de uma vez em vez de parar no primeiro. As verificações de formato vêm do ajv-formats. Tanto o schema como os dados são parseados localmente; nada é enviado para lado nenhum.
Seleção do draft: se o schema tem "$schema": "https://json-schema.org/draft/2020-12/schema" usamos o dialeto 2020-12; "http://json-schema.org/draft-07/schema#" seleciona Draft-07. Sem $schema, optamos por Draft-07 porque continua a ser o mais comum.
Notas
additionalProperties por defeito é permitido — está certo? Sim, conforme a especificação. Se queres proibir campos extra, define "additionalProperties": false explicitamente. Esta é de longe a causa mais comum de surpresas do tipo "pensei que o meu schema era estrito".
Qual é a diferença entre Draft-07 e 2020-12? O 2020-12 reformula referências ($dynamicRef), divide items em items e prefixItems e muda como additionalItems é tratado. A maioria dos schemas do dia a dia funciona em ambos, mas se usas validação de tuplos, a sintaxe é incompatível.
Porque é que o meu pattern regex faz match a coisas diferentes em validadores diferentes? O JSON Schema especifica sintaxe regex ECMA-262 (o flavor do JavaScript). Validadores noutras linguagens traduzem, por vezes imperfeitamente. Testa padrões no Testador de regex para ter a certeza.
Ferramentas relacionadas
- Formatador JSON — garante que ambos os inputs estão bem formados primeiro
- JSON ↔ YAML — quando o teu schema está em YAML
- Testador de regex — depura keywords
pattern