Utilia

Validador de JSON Schema

Valida um documento JSON com um JSON Schema no teu navegador. Cada erro é listado com o caminho na instância, a palavra-chave e o caminho no schema.

Como validar JSON com um schema

  1. Cola o teu schema em JSON Schema e os teus dados em Documento JSON, ou escolhe um caso pronto em Exemplo.
  2. Deixa Draft em Automático ($schema) para usar a versão indicada no $schema do schema, ou força o draft 4, 7, 2019-09 ou 2020-12.
  3. A validação corre enquanto escreves; Validar volta a executá-la. Formatar os dois reindenta os dois textos.
  4. Lê o resultado: uma linha verde quando o documento é válido, ou então uma tabela de erros.

Ler a tabela de erros

Cada linha é uma regra que falhou:

  • Caminho na instância é um JSON Pointer para o valor que falhou. /roles/1 é o segundo elemento de roles; (raiz) é o documento inteiro.
  • Palavra-chave é a regra do schema que falhou: type, required, minimum, pattern, format, additionalProperties, etc.
  • Mensagem explica a falha, por exemplo 0 is less than 1. As mensagens do validador estão em inglês.
  • Caminho no schema aponta para a palavra-chave dentro do schema, como /properties/id/minimum, para encontrares a regra depressa.

A validação não para no primeiro problema: todos os erros são listados. Quando uma propriedade de um objeto falha, o validador indica um resumo («Property “id” does not match schema») seguido do motivo preciso. Mostrar só os erros mais específicos esconde esses resumos; desmarca a opção para veres a cadeia completa. Os erros em anyOf e oneOf são sempre mantidos juntamente com os erros específicos de cada ramo, porque só fazem sentido em conjunto.

O que é suportado

  • Drafts: 4, 6 (validado com as regras do draft 7), 7, 2019-09 e 2020-12, incluindo $defs/definitions, $ref locais, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties e unevaluatedItems.
  • Formatos: são verificados date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer e relative-json-pointer. Os formatos desconhecidos são ignorados, como a especificação permite.
  • Referências: um $ref pode apontar para qualquer ponto do schema, incluindo um $id que este declare. Os schemas remotos nunca são transferidos; uma referência para outro URL é indicada como não resolvida.

Esta ferramenta valida documentos segundo o teu schema. Não verifica se o próprio schema respeita o meta-schema, mas avisa-te de nomes de type desconhecidos, como "strin" ou "int", um erro de escrita frequente que os validadores costumam ignorar em silêncio.

Os exemplos

  • Perfil de utilizador (2020-12): required, comprimentos de strings, format: email, um enum dentro de items, uniqueItems e additionalProperties: false.
  • Lista de produtos com $ref (draft-07): uma lista cujos elementos referenciam #/definitions/product, com um pattern para o SKU e um preço com exclusiveMinimum.
  • Configuração com if/then (2019-09): um certificado obrigatório apenas no modo HTTPS, um oneOf entre email e URI, e limites numéricos.

Cada exemplo vem com um documento com erros propositados, para veres como os erros aparecem.

Perguntas frequentes

Os meus dados são enviados?

Não. O schema e o documento são validados no teu navegador; nada é enviado para um servidor.

Porque é que o $ref do meu schema está «não resolvido»?

O validador só conhece o schema que colaste. Um $ref para outro ficheiro ou URL não pode ser seguido; copia as definições referenciadas para $defs e aponta antes para #/$defs/….

Que draft devo usar?

Usa aquele a que o teu projeto se destina e declara-o com $schema. Para schemas novos, o 2020-12 é a versão atual; o OpenAPI 3.1 também o usa.

Porque é que integer rejeita 2.0?

Não rejeita: o JSON Schema trata 2.0 como inteiro, porque o seu valor é inteiro. É 2.5 que falha "type": "integer".

Funciona offline?

Sim. Depois de a página carregar e de fazeres uma primeira validação (que carrega o validador), não é preciso ligação.