Skip to content

Validador JSON Schema

Valide JSON contra qualquer JSON Schema instantaneamente no navegador. Suporta Draft 2020-12, 2019-09 e Draft-07 com mensagens de erro com caminho preciso. 100% privado — sem upload, sem conta, gratuito.

Sem rastreamento Roda no navegador Grátis
Cole tanto os dados JSON como um esquema
Revisto para conformidade com Draft 2020-12, 2019-09 e Draft-07, incluindo casos limite de coerção de tipos, vocabulário format, resolução de $ref e caminhos de erro JSON Pointer. — Equipa Go Tools API Tooling · May 7, 2026

O que é um Validador JSON Schema?

Um validador JSON Schema é um programa que recebe dois documentos JSON — um documento de dados e um documento de esquema — e reporta se os dados cumprem o contrato do esquema. O esquema declara tipos de campos, chaves required, intervalos de valores, valores enum permitidos, padrões regex e regras estruturais usando um vocabulário fixo (type, properties, required, items, enum, oneOf, allOf, $ref, format). O validador percorre ambos os documentos em paralelo e emite zero ou mais erros, cada um fixado a um caminho JSON Pointer dentro dos dados.

A validação corre em tempo de execução, na fronteira entre o input não confiável e o seu código. Os tipos de TypeScript desaparecem em tempo de compilação e não conseguem ajudar com JSON que chega de um webhook, uma API de terceiros ou uma colagem do utilizador — esse vazio é exatamente o que JSON Schema preenche. Junte-o a TypeScript (ou Pydantic em Python) e obtém garantias em tempo de compilação dentro do seu código mais garantias em tempo de execução na fronteira.

Draft 2020-12 é a especificação atual e a que deve escolher para novos projetos em 2026. Drafts anteriores (2019-09, Draft-07, Draft-06, Draft-04) sobrevivem em código legado — Draft-07 continua comum em charts Helm, definições do VS Code e configurações antigas de Ajv. OpenAPI 3.1 usa Draft 2020-12 nativamente; OpenAPI 3.0 usa um subconjunto de Draft 4.

Esta ferramenta corre inteiramente no seu navegador. O seu JSON, o seu esquema e o output da validação nunca saem da sua máquina — segura para contratos de API proprietários e payloads sensíveis. Os ponteiros $ref internos resolvem-se automaticamente; os refs HTTP externos estão intencionalmente desativados para preservar a privacidade.

A trabalhar com ferramentas JSON adjacentes? Formate o JSON com o Formatador JSON antes de colar; compare dois documentos JSON com o JSON Diff; converta com JSON para YAML e YAML para JSON. Para validação end-to-end em Node, Python e navegador, veja o nosso guia de validação JSON Schema.

// A 5-line schema that catches three real bugs
const schema = {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id":    { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age":   { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
};

// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
//   /id   → type: expected integer, got string
//   /email → required: missing
//   /age   → maximum: 200 > 150

// In Node:        new Ajv().compile(schema)(bad)  // false; ajv.errors has the paths
// In Python:      jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install

Funcionalidades principais

Suporte multi-Draft

Draft 2020-12 (predefinido), 2019-09 e Draft-07. Deteta automaticamente o draft a partir do URI $schema; seletor de fallback para esquemas que não o tenham.

Erros com caminho preciso

Cada erro inclui um JSON Pointer (p. ex. /user/email/0), a keyword que falha (type, required, pattern) e uma mensagem de uma linha. Clique para saltar para a localização.

Validação ao vivo

Valida enquanto escreve. Os erros atualizam em tempo real para que itere sobre o esquema ou os dados sem passar por botões Validate.

Cobertura de keywords format

email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — os formats que de facto usa, validados com padrões testados em produção.

100% baseado no navegador

Os inputs nunca saem da sua máquina. Sem upload, sem analítica sobre o que cola, sem localStorage do JSON. Segura para contratos proprietários e payloads sensíveis.

Esquemas de exemplo, num clique

Presets carregáveis (formulário de registo, envelope de webhook, ficheiro de configuração, array de pedidos) levam-no a uma validação funcional em menos de cinco segundos.

Exemplos

Objeto válido — required + tipos

{
  "id": 42,
  "email": "alice@example.com",
  "age": 30
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
}

O esquema declara id e email como required e fixa os tipos. Os dados acima passam — todas as restrições são satisfeitas. Tente remover email ou mudar id para uma string para ver erros com caminho preciso.

Inválido — required em falta + tipo errado

{
  "id": "42",
  "age": 200
}
{
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "maximum": 150 }
  },
  "required": ["id", "email"]
}

Três erros: /id é uma string em vez de integer, /email está em falta, /age (200) excede o maximum 150. Cada erro reporta o caminho JSON Pointer exato para que possa corrigir os dados — ou relaxar o esquema — sem adivinhar.

União discriminada — oneOf com const

{
  "type": "order.created",
  "data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
}
{
  "oneOf": [
    {
      "properties": {
        "type": { "const": "order.created" },
        "data": {
          "type": "object",
          "properties": {
            "orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
            "totalUsd": { "type": "number", "minimum": 0 }
          },
          "required": ["orderId", "totalUsd"]
        }
      },
      "required": ["type", "data"]
    },
    {
      "properties": {
        "type": { "const": "order.refunded" },
        "data": { "type": "object", "required": ["refundId"] }
      },
      "required": ["type", "data"]
    }
  ]
}

Validação de envelope de webhook. O primeiro ramo de oneOf corresponde porque type é "order.created". Mude type para "order.refunded" ou quebre o pattern de orderId para ver como oneOf reporta as falhas por ramo.

Array de objetos — items + uniqueItems

[
  { "sku": "A1", "qty": 3 },
  { "sku": "B2", "qty": 5 },
  { "sku": "A1", "qty": 3 }
]
{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
      "qty": { "type": "integer", "minimum": 1 }
    },
    "required": ["sku", "qty"]
  }
}

Dois itens são byte-idênticos, então uniqueItems dispara. Os itens 0 e 2 colidem — o validador reporta o duplicado na raiz do array. Útil para apanhar duplicados de linhas de carrinho e bugs de merge em pedidos de envio.

Como usar

  1. 1

    Cole o seu JSON Schema

    Coloque o seu esquema no painel direito. O validador deteta automaticamente o draft a partir do URI $schema se presente; caso contrário, escolha Draft 2020-12, 2019-09 ou Draft-07 na barra de ferramentas.

  2. 2

    Cole os seus dados JSON

    Coloque o documento JSON que quer verificar no painel esquerdo. A validação corre enquanto escreve; inputs grandes (>200 KB) mudam para um botão Validate manual para manter a digitação fluida.

  3. 3

    Leia a lista de erros

    Cada erro tem um caminho JSON Pointer, uma keyword e uma mensagem de uma linha. Clique num erro para saltar para a localização nos seus dados, corrija-o e veja o contador descer em tempo real.

Armadilhas comuns de JSON Schema

Type: integer vs number

JSON Schema trata 1.0 como number mas não como integer. Se o seu contrato diz integer, o validador rejeita 1.0 — mesmo que a maioria das linguagens o considere igual a 1. Escolha number a menos que precise mesmo de integer.

✗ Incorreto
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ Correto
{ "qty": 1 }     schema: { "type": "integer" }   → valid

required no nível de aninhamento errado

required tem de ficar ao lado de properties, não dentro de uma propriedade. Um array required dentro da declaração de uma propriedade é silenciosamente ignorado — o validador nunca o aplica.

✗ Incorreto
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Correto
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

additionalProperties por defeito é true

Sem additionalProperties: false o esquema é aberto — qualquer chave extra passa. Esquecer isto é a razão mais comum para os esquemas "aceitarem tudo".

✗ Incorreto
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ Correto
{ "properties": { "id": { "type": "integer" } }, "additionalProperties": false }

OpenAPI 3.0 nullable vs array de tipos Draft 2020-12

OpenAPI 3.0 usa nullable: true; Draft 2020-12 usa type: ["string", "null"]. Misturá-los produz esquemas que parecem corretos mas, na realidade, nunca permitem null.

✗ Incorreto
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ Correto
{ "type": ["string", "null"] }   in 2020-12: explicitly allows null

Pattern sem âncoras

O regex de JSON Schema corresponde em qualquer parte por defeito — pattern: "^[A-Z]+$" ancora à string inteira, mas pattern: "[A-Z]+" corresponde se existir alguma maiúscula em qualquer ponto.

✗ Incorreto
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ Correto
pattern: "^[A-Z]+$"   accepts only: "HELLO"

oneOf onde se queria anyOf

oneOf exige que apenas um ramo corresponda. Se dois ramos aceitam a mesma forma, oneOf falha em dados que anyOf passaria — e a mensagem de erro é confusa ("matches more than one").

✗ Incorreto
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ Correto
anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → valid

Casos de uso comuns

Validação de pedido de API
Cole um corpo de pedido e o esquema do seu endpoint antes do deploy. Apanhe respostas 400 que os seus testes não cobriram — campos required em falta, tipos errados, números fora do intervalo.
Verificação de payload de webhook
O fornecedor enviou um payload que o seu handler rejeita? Valide o payload real contra o seu esquema, depois contra o esquema publicado do fornecedor. A diferença entre os dois é o seu bug.
Linting de ficheiros de configuração
package.json, tsconfig.json, helm values.yaml — cada ficheiro de configuração tem um esquema público. Cole o esquema, cole a configuração, encontre o typo. Salte o tentativa-erro.
Teste de componentes OpenAPI
Extraia um componente de esquema de um documento OpenAPI 3.1, cole-o aqui, valide payloads de exemplo. Mais rápido do que levantar um mock server, determinístico, sem SDK.
Pré-voo de submissão de formulário
Cole um payload de formulário de exemplo antes de cablar a validação no frontend. Confirme que o esquema rejeita o que espera, aceita o que espera, e depois envie o mesmo esquema para cliente e servidor.
Verificação de contrato de pipeline de dados
O output ETL desviou-se? Cole uma linha de exemplo e o esquema a jusante. Identifique qual produtor mudou e quais chaves se partiram antes de o pipeline retentar 10.000 registos.

Detalhes técnicos

Conforme com Draft 2020-12
Implementa a especificação Draft 2020-12 publicada — keywords, sistema de tipos, vocabulário format. Verificado contra o output de Ajv 8.x e ajv-formats.
Caminhos de erro JSON Pointer
Os erros usam JSON Pointer RFC 6901 (/user/email/0). Cada falha de keyword aponta para uma única localização resolúvel nos dados — sem ambiguidade, sem pesquisa por string.
Resolução interna de $ref
Resolve ponteiros $ref dentro de um único documento (#/$defs/foo, #/properties/bar). Ciclos detetados e reportados. $ref HTTP externos desativados por privacidade.

Boas práticas

Defina sempre additionalProperties: false
Em contratos de input (corpos de pedido, ficheiros de configuração, mensagens de fila), chaves desconhecidas costumam ser bugs — typos, campos acidentais ou sondagem de atacante. Rejeite-as por defeito.
Use $defs para subesquemas reutilizáveis
Se inlinar a mesma forma duas vezes, vão divergir. Mova as definições partilhadas para $defs e referencie com $ref — uma única fonte de verdade, cada alteração aplica-se em todo o lado.
Valide antes da lógica de negócio
Corra a validação de esquema logo a seguir a JSON.parse, antes de tocar na estrutura analisada. Estreitamento de tipos, valores por defeito e persistência assumem que o contrato se mantém — garanta que se mantém.

Perguntas frequentes

O que é a validação JSON Schema?
A validação JSON Schema verifica se um documento JSON cumpre um contrato escrito em sintaxe JSON Schema. O esquema declara tipos de campos, chaves required, valores permitidos e regras estruturais; o validador percorre ambos os documentos em paralelo e reporta qualquer caminho que viole o contrato. Corre na fronteira entre o input não confiável (pedido de API, webhook, ficheiro de configuração, payload de formulário) e a sua lógica de negócio — apanhando erros de forma antes que corrompam o código a jusante. Veja o nosso guia completo de validação JSON Schema para exemplos end-to-end em Node, Python e navegador.
Que drafts de JSON Schema é que este validador suporta?
Draft 2020-12 (predefinido e recomendado), Draft 2019-09 e Draft-07. O validador deteta automaticamente o draft a partir do URI $schema do esquema quando presente e recorre à sua escolha no menu drop-down caso contrário. Para novos projetos em 2026 use Draft 2020-12 — é o que OpenAPI 3.1 usa nativamente e o que Ajv usa por defeito. Draft-07 continua comum em código legado (configurações antigas de AJV, charts Helm, definições do VS Code).
Como valido JSON contra um esquema?
Cole os seus dados JSON no painel esquerdo e o seu JSON Schema no painel direito. O validador corre instantaneamente enquanto escreve — o visto verde significa válido, a lista vermelha significa erros. Cada erro inclui um caminho JSON Pointer (por exemplo /user/email), a keyword que falha (type, required, pattern, minimum) e uma mensagem legível. Clique em qualquer erro para saltar para a linha problemática. Sem upload, sem registo.
Qual é a diferença entre validação JSON Schema e validação de sintaxe JSON?
A validação de sintaxe JSON apenas confirma que o documento é parseado — sem vírgulas a mais, sem chavetas em falta. O Formatador JSON trata disso. A validação JSON Schema corre depois do parsing e verifica se a estrutura analisada cumpre o contrato: campos required presentes, tipos corretos, valores no intervalo. Geralmente corre ambas — primeiro formate para confirmar que é parseável, depois valide contra o esquema.
Porque é que o meu esquema rejeita JSON que parece correto?
Cinco suspeitos do costume: (1) additionalProperties: false — os seus dados têm uma chave que o esquema não declarou, frequentemente um typo ou um campo novo; (2) type: "integer" vs "number" — JSON Schema trata 1.0 como number, não integer; (3) as keywords format (email, uri, uuid) rejeitam strings mal formadas mesmo quando parecem corretas; (4) required no nível de aninhamento errado — required deve aparecer ao lado de properties, não dentro de uma; (5) o JSON tem a string "42" onde o esquema espera o integer 42. O caminho do erro vai indicar qual.
Suporta $ref e referências remotas a esquemas?
Os ponteiros $ref internos (#/$defs/foo, #/properties/bar) funcionam de imediato. Os $ref remotos para URLs externos estão intencionalmente desativados — descarregar esquemas externos exporia a sua atividade de validação a terceiros e quebraria o modelo de privacidade. Para validar contra um esquema multi-ficheiro, inclua as definições referenciadas num único documento usando $defs, ou corra a validação na sua própria CI com Ajv onde os refs remotos são apropriados.
O que faz additionalProperties: false?
additionalProperties: false rejeita qualquer chave que não esteja declarada em properties. É a keyword mais útil para apertar contratos — sem ela, os esquemas são abertos por defeito e aceitam silenciosamente campos mal escritos ou maliciosos. Ative sempre additionalProperties: false em contratos de input (corpos de pedido, ficheiros de configuração, mensagens de fila). Deixe a true (ou omita) apenas quando o esquema for uma descrição parcial de um documento maior.
Como valido JSON contra um esquema em Node.js ou Python?
Node: instale Ajv (npm i ajv ajv-formats), chame new Ajv().compile(schema), depois validate(data). Python: instale jsonschema (pip install jsonschema), chame jsonschema.validate(data, schema). Para TypeScript, gere os tipos a partir do esquema com json-schema-to-typescript para que o tempo de compilação e o de execução fiquem em sincronia. O nosso guia de validação JSON Schema tem receitas prontas a copiar para Node, Python e navegador.
Qual é a diferença entre oneOf, anyOf e allOf?
allOf — tem de corresponder a cada subesquema (interseção, usado para composição). anyOf — tem de corresponder a pelo menos um (união, fast-fail). oneOf — tem de corresponder exatamente a um (união discriminada, mais lento mas mais rigoroso). Use oneOf para uniões discriminadas como eventos de webhook etiquetados por type; use anyOf para uniões permissivas; use allOf para estender um esquema base com restrições adicionais. oneOf é o mais lento porque testa todos os ramos — prefira anyOf quando exatamente-um não for necessário.
Suporta esquemas OpenAPI?
OpenAPI 3.1 usa Draft 2020-12 nativamente, então qualquer componente de esquema OpenAPI 3.1 cola-se diretamente. OpenAPI 3.0 usa um subconjunto de Draft 4 que é maioritariamente compatível — pode encontrar casos limite com nullable: true (sintaxe 3.0) que Draft 2020-12 expressa como type: ["string", "null"]. Para validação completa de documentos OpenAPI (paths, operations, security), use um linter dedicado de OpenAPI como o Spectral; esta ferramenta foca-se na parte do esquema.
Porque é que o validador diz que o meu JSON Schema é, ele próprio, inválido?
Um JSON Schema é um documento JSON que tem de ser JSON válido antes de poder ser um esquema válido. Causas comuns: vírgula no final num objeto properties, plicas em vez de aspas, $schema apontando para um URL de draft inexistente, ou required listado como string em vez de array. Formate primeiro o esquema no Formatador JSON para fazer aparecer problemas de sintaxe e depois cole-o aqui para validação semântica.
A ferramenta envia o meu JSON ou esquema para um servidor?
Não. Todo o parsing e validação corre localmente no seu navegador. O seu JSON, o seu esquema e os resultados de validação nunca saem da sua máquina — sem upload, sem localStorage dos inputs, sem analítica sobre o que cola. Seguro para contratos de API proprietários, ficheiros de configuração internos e payloads sensíveis. Apenas a sua escolha de draft persiste em localStorage para sobreviver a um refresh; limpe os dados do navegador para apagar.
Posso validar JSON Lines (NDJSON) ou múltiplos documentos?
Esta ferramenta valida um documento por execução. Para JSON Lines, valide cada linha individualmente ou use Ajv em Node com um esquema e um parser de stream como JSONStream. Para validação em batch de grandes datasets, prefira a linha de comandos — ajv-cli ou check-jsonschema (Python) processam milhares de ficheiros por segundo com uma única compilação de esquema.

Ferramentas relacionadas

Ver todas as ferramentas →

Decodificador e Codificador Base64

Codificação e Formatação

Decodifique e codifique Base64 online gratuitamente. Conversão em tempo real com suporte completo a UTF-8 e emoji. 100% privado — executa no seu navegador. Sem necessidade de cadastro.

JSON Diff (Comparar)

Codificação e Formatação

Compare dois arquivos JSON instantaneamente no navegador. Destaque lado a lado, saída JSON Patch (RFC 6902), ignore campos ruidosos como timestamps e IDs. 100% privado, sem upload.

Formatador e Validador JSON

Codificação e Formatação

Formate, valide e embeleze JSON instantaneamente no seu navegador. Ferramenta online gratuita com validação de sintaxe, detecção de erros, minificação e cópia com um clique. 100% privado — seus dados nunca saem do seu dispositivo.

Conversor JSON para YAML

Codificação e Formatação

Cole JSON e obtenha YAML instantaneamente. Conversão ao vivo no navegador. K8s/Compose, indentação 2/4 espaços, Norway-safe. 100% privado, sem upload.

Gerador de QR Code — URL, WiFi, vCard, Email, SMS

Codificação e Formatação

Gerador de QR Code grátis. Crie códigos QR estáticos para URL, WiFi, vCard, email e SMS. Download em SVG e PNG. Sem expiração, sem cadastro, 100% no seu navegador.

Codificador e Decodificador de URL com Analisador Integrado

Codificação e Formatação

Cole uma URL para decodificar ou codificar em tempo real. Analisador de URL integrado decompõe cada componente em campos editáveis. Modo duplo: encodeURI e encodeURIComponent. Privado — nenhum dado enviado a servidor.