ToolDeck

Validador de JSON Schema

Valide dados JSON contra um JSON Schema (Draft 7)

Experimente um exemplo

Dados JSON

JSON Schema

Roda localmente · Seguro para colar segredos
Roda localmente · Seguro para colar segredos

O que é validação de JSON Schema?

Validação de JSON Schema é o processo de verificar se um documento JSON está em conformidade com um conjunto de restrições estruturais e de valor definidas em um JSON Schema. O próprio schema é um documento JSON que descreve a forma esperada dos seus dados: quais propriedades são obrigatórias, quais tipos devem ter, os intervalos permitidos para números, padrões de strings, tamanhos de arrays e muito mais. A especificação JSON Schema é mantida em json-schema.org e publicada como uma série de rascunhos IETF; Draft 7 e Draft 2020-12 são os mais amplamente adotados.

Enquanto a validação JSON simples verifica apenas sintaxe (os colchetes estão pareados? as strings estão entre aspas?), a validação por schema vai além. Ela responde perguntas como: a resposta desta API contém um campo "id" que é sempre um inteiro? O campo "status" é um dos três valores permitidos? Os objetos aninhados têm a forma correta? Esse tipo de verificação estrutural captura bugs que a verificação de sintaxe ignora completamente, pois um JSON sintaticamente válido pode ainda ser semanticamente incorreto para sua aplicação.

JSON Schema é usado em definições OpenAPI/Swagger, validação de arquivos de configuração, validação de formulários, restrições de documentos em bancos de dados e testes automatizados. Ferramentas como Ajv (JavaScript), jsonschema (Python) e check-jsonschema (CLI) implementam a especificação para que você possa validar dados programaticamente. Este validador online permite colar um schema e um documento de dados para verificar a conformidade instantaneamente, sem instalar nenhuma biblioteca.

Por que usar um validador de JSON Schema online?

Escrever schemas e depurar erros de validação manualmente é lento. Um validador de JSON Schema online fornece feedback imediato sobre se seus dados estão em conformidade com o schema, com mensagens de erro claras apontando exatamente a propriedade que falhou.

Feedback de validação instantâneo
Cole seu schema e seus dados e veja os resultados da validação em tempo real. Cada erro exibe o caminho JSON e a restrição específica que falhou, para que você resolva os problemas sem precisar ler a saída de uma biblioteca de validação.
🔒
Processamento apenas no navegador, privacidade em primeiro lugar
Seus dados JSON nunca saem do navegador. Toda a validação é executada localmente em JavaScript. Sem servidor, sem logs, sem retenção de dados. Seguro para schemas que descrevem APIs internas ou contêm nomes de campos proprietários.
🎯
Validação compatível com o Draft
O validador suporta palavras-chave do schema Draft 7, incluindo type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf e additionalProperties. Teste seu schema aqui antes de integrá-lo ao seu pipeline de build ou suite de testes.
📋
Sem conta ou instalação
Abra a página, cole seu JSON e valide. Sem npm install, sem pip, sem imagem Docker. Útil quando você precisa de uma verificação rápida de schema em uma máquina onde não pode instalar ferramentas de desenvolvimento.

Casos de uso para validação de JSON Schema

Testes de contrato de API
Valide respostas de API contra o schema definido na sua especificação OpenAPI. Detecte quebras de contrato — como um campo mudando de inteiro para string — antes que cheguem à produção.
Verificação de arquivos de configuração
Verifique se arquivos de configuração JSON para pipelines de CI/CD, manifestos do Kubernetes ou configurações de aplicação correspondem ao schema esperado antes de fazer commit. Evita falhas de implantação causadas por chaves ausentes ou digitadas incorretamente.
Gates de pipeline DevOps
Adicione validação de schema como etapa de CI para rejeitar payloads que violem o contrato. Funciona para arquivos de variáveis do Terraform, inputs do GitHub Actions ou qualquer JSON estruturado consumido por automação.
QA e revisão de dados de teste
Verifique se fixtures de teste e arquivos de mock estão em conformidade com o mesmo schema que sua aplicação espera. Dados de teste divergentes são uma fonte comum de resultados de teste falso-positivos.
Ingestão em pipelines de dados
Valide registros JSON recebidos na borda de um pipeline de dados. A validação por schema filtra eventos malformados antes que cheguem ao seu data warehouse, reduzindo custos de limpeza posteriores.
Aprendizado da sintaxe de JSON Schema
Experimente palavras-chave do schema de forma interativa. Escreva um schema, cole dados de teste e veja quais restrições passam ou falham. Mais rápido do que escrever um script e executá-lo no terminal a cada vez.

Referência de palavras-chave do JSON Schema

Um JSON Schema é construído a partir de palavras-chave que impõem restrições aos dados validados. A tabela abaixo lista as palavras-chave mais usadas no Draft 7 e versões posteriores. Cada palavra-chave pode ser combinada com outras no mesmo objeto de schema.

Palavra-chaveFinalidadeExemplo
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Comparação de versões do JSON Schema: Draft 7 vs 2019-09 vs 2020-12

O JSON Schema passou por várias versões de rascunho. O Draft 7 (publicado em 2018) é o mais amplamente suportado pelas ferramentas. O Draft 2019-09 introduziu $defs (substituindo definitions), unevaluatedProperties e $recursiveRef. O Draft 2020-12 (a versão estável mais recente) substituiu $recursiveRef por $dynamicRef e introduziu prefixItems para validação de tuplas. Ao escolher um draft, verifique se sua biblioteca de validação o suporta. O Ajv suporta os três drafts. A biblioteca jsonschema do Python suporta até 2020-12 desde a versão 4.0.

RecursoDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Exemplos de código

Estes exemplos mostram como validar JSON contra um schema programaticamente. Cada um utiliza uma biblioteca bem mantida para seu ecossistema de linguagem.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Perguntas frequentes

Qual é a diferença entre validação JSON e validação de JSON Schema?
A validação JSON verifica se uma string é um JSON sintaticamente válido: colchetes corretamente aninhados, chaves entre aspas, sem vírgulas no final. A validação de JSON Schema vai além e verifica se os dados JSON parseados correspondem a um contrato estrutural: tipos corretos, campos obrigatórios presentes, valores dentro dos intervalos permitidos. Você precisa de JSON válido antes de aplicar um schema, mas um JSON válido ainda pode falhar na validação por schema.
Qual versão do JSON Schema devo usar?
O Draft 7 é o padrão mais seguro. Tem o maior suporte entre bibliotecas de diferentes linguagens e cobre as palavras-chave que a maioria dos projetos precisa: type, properties, required, enum, pattern, anyOf, oneOf, allOf e $ref. Use o Draft 2020-12 se precisar de recursos como prefixItems para validação de tuplas, $dynamicRef para schemas extensíveis, ou unevaluatedProperties para formatos de objeto estritos. Consulte a documentação da sua biblioteca de validação para confirmar o suporte ao draft antes de migrar.
Como funciona $ref no JSON Schema?
A palavra-chave $ref permite referenciar outro schema por URI em vez de duplicá-lo. Um valor como "$ref": "#/$defs/address" aponta para um schema definido na seção $defs do mesmo documento. Você também pode referenciar arquivos externos com "$ref": "https://example.com/schemas/address.json". No Draft 7, $ref substitui todas as palavras-chave irmãs no mesmo objeto. No Draft 2019-09 e posteriores, as palavras-chave irmãs são aplicadas junto com $ref.
Qual é a diferença entre anyOf, oneOf e allOf?
allOf exige que os dados correspondam a todos os sub-schemas do array. anyOf exige correspondência com pelo menos um sub-schema. oneOf exige correspondência com exatamente um sub-schema e falha se os dados corresponderem a zero ou mais de um. Para campos que aceitam null, anyOf com um tipo e null é comum: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Use oneOf quando os sub-schemas são mutuamente exclusivos, como em uniões discriminadas.
JSON Schema consegue validar objetos e arrays aninhados?
Sim. Use a palavra-chave properties para definir schemas para chaves de objetos aninhados, e a palavra-chave items para definir um schema que cada elemento do array deve corresponder. É possível aninhar a qualquer profundidade. Para arrays onde cada posição tem um schema diferente (tuplas), use prefixItems no Draft 2020-12 ou a forma de array de items no Draft 7.
Os dados que colo nesta ferramenta são enviados a um servidor?
Não. O validador é executado inteiramente no seu navegador usando JavaScript. Seus dados JSON e schema nunca são transmitidos a nenhum servidor. Você pode verificar isso abrindo o inspetor de rede do navegador enquanto usa a ferramenta.
Como valido JSON Schema em um pipeline de CI/CD?
Use um validador de linha de comando como check-jsonschema (Python/pip) ou ajv-cli (Node.js/npm). Ambos aceitam um arquivo de schema e um ou mais arquivos de dados como argumentos. Adicione o comando de validação como uma etapa no seu arquivo de configuração de CI. Se a validação falhar, o processo encerra com código diferente de zero, bloqueando o pipeline. Para o GitHub Actions, você também pode usar a action check-jsonschema diretamente.