Valide um JSON com um JSON Schema (draft 2020-12, ou draft-07 pelo $schema) e veja cada erro com o caminho em que ele ocorre.
O que é o JSON Schema Validator?
O JSON Schema Validator é uma ferramenta online gratuita que confere um documento JSON com um JSON Schema, no seu navegador, e lista cada ponto em que o documento descumpre o schema, cada um com a sua localização e a palavra-chave que falhou. Ele segue o draft 2020-12, a menos que o schema indique outro draft em $schema.
Use para testar um schema ou para descobrir por que o payload de uma API ou um arquivo de configuração é recusado.
O que ela aceita
- Um schema (um objeto, ou true ou false) e um documento JSON, ambos como texto. A validação segue o JSON Schema draft 2020-12, a menos que $schema diga outra coisa.
- Drafts: $schema seleciona draft-04, draft-06, draft-07, 2019-09 ou 2020-12, com http ou https e com ou sem um # final. O draft-06 é verificado com as regras do draft-07, porque a ferramenta não tem um modo draft-06 separado e o draft-07 só acrescenta palavras-chave a ele. Qualquer outro $schema é recusado.
- Todos os erros são coletados, não só o primeiro. Cada um é uma linha com a localização do valor no seu JSON como um JSON Pointer depois de # (# é o documento inteiro, #/items/1/qty é um valor aninhado), a palavra-chave que falhou entre parênteses e uma explicação.
- Erros que apenas se repetem aparecem uma vez, e as linhas que só repetem um erro mais profundo ficam de fora. Se houver mais de 100 erros, os 100 primeiros são listados e o resultado diz quantos mais foram omitidos.
- Um $ref que aponta para dentro do mesmo schema, como #/$defs/name, é seguido. Um $ref para outro documento nunca é buscado: ele é recusado como schema inválido.
- Um schema que é apenas true aceita todo documento, e false recusa todos.
Bom saber
- A ferramenta só valida. Ela nunca altera o seu JSON, preenche valores padrão nem converte tipos.
- A localização e a palavra-chave são as partes em que confiar. A explicação depois delas é um resumo em linguagem simples, escrito no idioma da página.
- Antes de validar, a ferramenta recusa um schema, aponta-o como o schema e indica a palavra-chave, quando um type não é um dos tipos JSON (array, boolean, integer, null, number, object ou string), quando um $ref não aponta para lugar nenhum ou aponta para outro documento, ou quando um pattern ou um nome de patternProperties não é uma expressão regular válida. Um $ref que volta para si mesmo é interrompido como limite de processamento.
- A ferramenta não confere um schema com o seu meta-schema. Qualquer outra palavra-chave com o formato errado (como required: 5) só é percebida quando o JSON conferido chega até ela, então um erro ali pode passar despercebido.
- Um nome repetido dentro de um objeto, no schema ou no JSON, e uma string com um escape substituto (surrogate) sem par são recusados em vez de deixar um valor vencer.
- Na validação, os números são lidos como os números de precisão dupla que a maioria dos programas usa, então um número com mais dígitos que isso é comparado pelo valor arredondado.
Como usar o JSON Schema Validator?
- Cole ou digite o seu schema em “Schema JSON” e o JSON a conferir em “JSON”. Nada é executado enquanto você digita.
- Aperte “Validar”.
- Leia o resultado ao lado das entradas. Se o JSON seguir o schema, o resultado diz isso. Se não seguir, cada erro é uma linha: a localização no seu JSON, a palavra-chave que falhou entre parênteses e uma explicação. Se uma entrada não puder ser usada, a mensagem diz qual é e informa a linha e a coluna.
- Quando houver erros, aperte “Copiar” para colocá-los na área de transferência, ou “Baixar” para salvá-los como errors.txt.
Exemplos
JSON que segue o schema
Coloque o schema em “Schema JSON”, este JSON em “JSON” e aperte “Validar”. Todas as regras são cumpridas, então o resultado diz que o JSON segue o schema.
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
}{"name": "Ada", "age": 36}O JSON é válido de acordo com o schema.
Erros com a sua localização
O name que o schema exige está faltando, o que é informado em # (o documento inteiro), e age está abaixo do mínimo de 0, o que é informado em #/age. Todos os erros são listados juntos, não só o primeiro.
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
}{"age": -3}O JSON não corresponde ao schema.
# (required): Falta a propriedade obrigatória "name".
#/age (minimum): -3 é menor que 0.Um tipo errado e uma propriedade extra
age é um texto, mas o schema pede um inteiro. A propriedade extra não é um erro, porque este schema não define additionalProperties como false: um schema permite tudo o que não proíbe.
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
}{"name": "Ada", "age": "x", "extra": 1}O JSON não corresponde ao schema.
#/age (type): O tipo "string" não é válido. Esperado: "integer".Um schema que a ferramenta não consegue usar
A ferramenta suporta o draft-04, draft-06, draft-07, 2019-09 e 2020-12. Um $schema desconhecido é recusado, em vez de validar com regras que podem não ser as que você quis. A mensagem aponta para a entrada do schema.
{"$schema": "https://example.com/meta"}{}O schema declara um $schema que esta ferramenta não suporta. Ela suporta JSON Schema draft-04, draft-06, draft-07, 2019-09 e 2020-12. Remova o $schema para usar o 2020-12.
Limites e privacidade
Limites de tamanho
- Entrada: cada caixa aceita até 2.000.000 bytes de texto em UTF-8 (cerca de 2 MB), contados separadamente. Letras acentuadas e emojis ocupam mais de um byte cada. Uma entrada maior é recusada.
- Aninhamento: até 256 níveis de objetos e listas dentro uns dos outros. Um JSON mais profundo é recusado porque passa do que a ferramenta processa.
- Tempo: uma execução que demora mais que o seu limite de tempo é interrompida. Tente uma entrada menor.
Meu texto é enviado para um servidor?
Não. O texto que você digita ou cola, ou abre de um arquivo local, é processado localmente no seu navegador, em um Web Worker dedicado. Ele nunca é enviado para o servidor (um arquivo que você abre é lido apenas no seu navegador) e não é gravado em armazenamento, cookies nem na barra de endereços.
“Copiar” coloca o resultado na área de transferência e “Baixar” o salva como arquivo, mas só quando você aperta o botão. O arquivo é criado no seu navegador, então nada é enviado.
Para ver os detalhes completos, consulte a Política de Privacidade
Ferramentas e páginas relacionadas
O seu texto continua na página quando você troca de ferramenta na mesma aba, então dá para testar o mesmo texto em outra. Recarregar ou fechar a aba o encerra.