Skip to content

Validador JSON Schema

Valida JSON contra cualquier JSON Schema al instante en tu navegador. Compatible con Draft 2020-12, 2019-09 y Draft-07 con mensajes de error con ruta precisa. 100% privado, sin carga, sin cuenta, gratis.

Sin rastreo Se ejecuta en el navegador Gratis
Pega tanto los datos JSON como un esquema
Revisado para conformidad con Draft 2020-12, 2019-09 y Draft-07, incluyendo casos límite de coerción de tipos, vocabulario format, resolución de $ref y rutas de error JSON Pointer. — Equipo Go Tools API Tooling · May 7, 2026

¿Qué es un Validador JSON Schema?

Un validador JSON Schema es un programa que toma dos documentos JSON — un documento de datos y un documento de esquema — y reporta si los datos cumplen el contrato del esquema. El esquema declara tipos de campo, claves requeridas, rangos de valores, valores enum permitidos, patrones regex y reglas estructurales mediante un vocabulario fijo (type, properties, required, items, enum, oneOf, allOf, $ref, format). El validador recorre ambos documentos en paralelo y emite cero o más errores, cada uno fijado a una ruta JSON Pointer dentro de los datos.

La validación se ejecuta en tiempo de ejecución, en la frontera entre la entrada no confiable y tu código. Los tipos de TypeScript desaparecen en tiempo de compilación y no pueden ayudar con JSON que llega de un webhook, una API de terceros o un pegado de usuario — esa brecha es exactamente la que cubre JSON Schema. Combínalo con TypeScript (o Pydantic en Python) y obtienes garantías en tiempo de compilación dentro de tu base de código más garantías en tiempo de ejecución en la frontera.

Draft 2020-12 es la especificación actual y la que deberías elegir para nuevos proyectos en 2026. Drafts anteriores (2019-09, Draft-07, Draft-06, Draft-04) sobreviven en bases heredadas — Draft-07 sigue siendo común en charts de Helm, ajustes de VS Code y configuraciones antiguas de Ajv. OpenAPI 3.1 usa Draft 2020-12 nativamente; OpenAPI 3.0 usa un subconjunto de Draft 4.

Esta herramienta se ejecuta totalmente en tu navegador. Tu JSON, tu esquema y la salida de validación nunca abandonan tu equipo — segura para contratos de API propietarios y payloads sensibles. Los punteros $ref internos se resuelven automáticamente; los refs HTTP externos están desactivados a propósito para preservar la privacidad.

¿Trabajas con herramientas JSON adyacentes? Da formato al JSON con el Formateador JSON antes de pegarlo; compara dos documentos JSON con JSON Diff; convierte con JSON a YAML y YAML a JSON. Para validación completa en Node, Python y el navegador, consulta nuestra guía de validación 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

Características principales

Soporte multi-Draft

Draft 2020-12 (predeterminado), 2019-09 y Draft-07. Autodetecta el draft a partir del URI $schema; selector de respaldo para esquemas que no lo tengan.

Errores con ruta precisa

Cada error incluye un JSON Pointer (p. ej. /user/email/0), la keyword que falla (type, required, pattern) y un mensaje de una línea. Haz clic para saltar a la ubicación.

Validación en vivo

Valida mientras escribes. Los errores se actualizan en tiempo real para que itera sobre el esquema o los datos sin pasar por botones de Validate.

Cobertura de keywords format

email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — los formats que de verdad utilizas, validados con patrones probados.

100% basado en navegador

Las entradas nunca salen de tu equipo. Sin carga, sin analítica sobre lo que pegas, sin localStorage del JSON. Segura para contratos propietarios y payloads sensibles.

Esquemas de muestra, un clic

Presets cargables (formulario de registro, sobre de webhook, archivo de configuración, array de pedidos) te llevan a una validación funcional en menos de cinco segundos.

Ejemplos

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
}

El esquema declara id y email como requeridos y fija los tipos. Los datos anteriores pasan la validación — todas las restricciones se cumplen. Prueba a quitar email o cambiar id a una cadena para ver errores con ruta precisa.

Inválido — falta required + tipo incorrecto

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

Tres errores: /id es una cadena en lugar de entero, /email falta, /age (200) supera el maximum 150. Cada error reporta la ruta JSON Pointer exacta para que puedas corregir los datos — o relajar el esquema — sin adivinar.

Unión discriminada — oneOf con 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"]
    }
  ]
}

Validación de un sobre de webhook. La primera rama de oneOf coincide porque type es "order.created". Cambia type a "order.refunded" o rompe el patrón de orderId para ver cómo oneOf reporta los fallos por rama.

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"]
  }
}

Dos elementos son idénticos byte a byte, así que uniqueItems se dispara. Los elementos 0 y 2 colisionan — el validador reporta el duplicado en la raíz del array. Útil para detectar duplicados en líneas de carrito y errores de fusión en peticiones de envío.

Cómo usar

  1. 1

    Pega tu JSON Schema

    Coloca tu esquema en el panel derecho. El validador autodetecta el draft a partir del URI $schema si está presente; en caso contrario, elige Draft 2020-12, 2019-09 o Draft-07 en la barra de herramientas.

  2. 2

    Pega tus datos JSON

    Coloca el documento JSON que quieres comprobar en el panel izquierdo. La validación se ejecuta mientras escribes; las entradas grandes (>200 KB) cambian a un botón manual de Validate para que la escritura siga ágil.

  3. 3

    Lee la lista de errores

    Cada error tiene una ruta JSON Pointer, una keyword y un mensaje de una línea. Haz clic en un error para saltar a la ubicación en tus datos, corrígelo y observa cómo el contador baja en tiempo real.

Errores comunes en JSON Schema

Type: integer vs number

JSON Schema trata 1.0 como number pero no como integer. Si tu contrato dice integer, el validador rechaza 1.0 — aunque la mayoría de lenguajes lo consideren igual a 1. Elige number salvo que de verdad necesites integer.

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

required en el nivel de anidamiento incorrecto

required debe ir junto a properties, no dentro de una propiedad. Un array required dentro de la declaración de una propiedad se ignora silenciosamente — el validador nunca lo aplica.

✗ Incorrecto
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Correcto
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

El valor por defecto de additionalProperties es true

Sin additionalProperties: false, el esquema es abierto — cualquier clave extra pasa. Olvidar esto es la razón más común de que los esquemas "acepten todo".

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

OpenAPI 3.0 nullable vs array de tipos en Draft 2020-12

OpenAPI 3.0 usa nullable: true; Draft 2020-12 usa type: ["string", "null"]. Mezclarlos produce esquemas que parecen correctos pero nunca permiten null en realidad.

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

Patrón sin anclas

El regex de JSON Schema coincide en cualquier parte por defecto — pattern: "^[A-Z]+$" ancla a toda la cadena, pero pattern: "[A-Z]+" coincide si existe alguna letra mayúscula en cualquier sitio.

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

oneOf donde se quería anyOf

oneOf exige que coincida exactamente una rama. Si dos ramas aceptan la misma forma, oneOf falla con datos que anyOf aceptaría — y el mensaje de error es confuso ("matches more than one").

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

Casos de uso comunes

Validación de petición de API
Pega un cuerpo de petición y el esquema de tu endpoint antes de desplegar. Atrapa respuestas 400 que tus tests no cubrieron — campos requeridos faltantes, tipos incorrectos, números fuera de rango.
Verificación de payload de webhook
¿El proveedor envió un payload que tu manejador rechaza? Valida el payload real contra tu esquema y luego contra el esquema publicado del proveedor. La diferencia entre ambos es tu bug.
Linting de archivos de configuración
package.json, tsconfig.json, helm values.yaml — todo archivo de configuración tiene un esquema público. Pega el esquema, pega la configuración, encuentra el typo. Olvídate del prueba y error.
Pruebas de componentes OpenAPI
Extrae un componente de esquema de un documento OpenAPI 3.1, pégalo aquí y valida payloads de muestra. Más rápido que levantar un servidor mock, determinista, sin SDK.
Pre-vuelo de envío de formulario
Pega un payload de formulario de muestra antes de cablear la validación del frontend. Confirma que el esquema rechaza lo que esperas y acepta lo que esperas, y luego envía el mismo esquema a cliente y servidor.
Verificación de contrato de pipeline de datos
¿La salida ETL ha derivado? Pega una fila de muestra y el esquema posterior. Identifica qué productor cambió y qué claves se rompieron antes de que el pipeline reintente 10.000 registros.

Detalles técnicos

Conforme con Draft 2020-12
Implementa la especificación publicada de Draft 2020-12 — keywords, sistema de tipos, vocabulario format. Comprobado contra la salida de Ajv 8.x y ajv-formats.
Rutas de error con JSON Pointer
Los errores usan JSON Pointer RFC 6901 (/user/email/0). Cada fallo de keyword apunta a una ubicación resoluble única en los datos — sin ambigüedad, sin búsqueda por cadena.
Resolución interna de $ref
Resuelve punteros $ref dentro de un único documento (#/$defs/foo, #/properties/bar). Detecta y reporta ciclos. Los $ref HTTP externos están desactivados por privacidad.

Buenas prácticas

Activa siempre additionalProperties: false
En contratos de entrada (cuerpos de petición, archivos de configuración, mensajes de cola), las claves desconocidas suelen ser bugs — typos, campos accidentales o sondeos de atacantes. Recházalas por defecto.
Usa $defs para subesquemas reutilizables
Si copias la misma forma dos veces, divergirán. Mueve las definiciones compartidas a $defs y referéncialas con $ref — una sola fuente de verdad, todo cambio se aplica en todas partes.
Valida antes de la lógica de negocio
Ejecuta la validación de esquema justo después de JSON.parse, antes de tocar la estructura parseada. El estrechamiento de tipos, los valores por defecto y la persistencia asumen que el contrato se cumple — asegúrate de que así sea.

Preguntas frecuentes

¿Qué es la validación JSON Schema?
La validación JSON Schema comprueba si un documento JSON cumple un contrato escrito en sintaxis JSON Schema. El esquema declara tipos de campo, claves requeridas, valores permitidos y reglas estructurales; el validador recorre ambos documentos en paralelo y reporta cualquier ruta que viole el contrato. Se ejecuta en la frontera entre la entrada no confiable (petición de API, webhook, archivo de configuración, payload de formulario) y tu lógica de negocio — atrapando errores de forma antes de que corrompan el código posterior. Consulta nuestra guía completa de validación JSON Schema para ejemplos completos en Node, Python y navegador.
¿Qué drafts de JSON Schema admite este validador?
Draft 2020-12 (predeterminado y recomendado), Draft 2019-09 y Draft-07. El validador autodetecta el draft a partir del URI $schema del esquema cuando está presente y, en caso contrario, recurre a tu selección del menú desplegable. Para nuevos proyectos en 2026 utiliza Draft 2020-12 — es lo que OpenAPI 3.1 usa de forma nativa y lo que Ajv toma por defecto. Draft-07 sigue siendo común en bases de código heredadas (configuraciones AJV antiguas, charts de Helm, ajustes de VS Code).
¿Cómo valido JSON contra un esquema?
Pega tus datos JSON en el panel izquierdo y tu JSON Schema en el panel derecho. El validador se ejecuta al instante mientras escribes — la marca verde significa válido, la lista roja significa errores. Cada error incluye una ruta JSON Pointer (por ejemplo /user/email), la keyword que falla (type, required, pattern, minimum) y un mensaje legible. Haz clic en cualquier error para saltar a la línea problemática. Sin carga, sin registro.
¿Cuál es la diferencia entre validación JSON Schema y validación de sintaxis JSON?
La validación de sintaxis JSON solo confirma que el documento se parsea — sin comas extra, sin llaves faltantes. Formateador JSON se encarga de eso. La validación JSON Schema se ejecuta tras el parseo y comprueba si la estructura parseada cumple el contrato: campos requeridos presentes, tipos correctos, valores en rango. Normalmente ejecutas ambas — primero formatea para confirmar que se parsea, luego valida contra el esquema.
¿Por qué mi esquema rechaza JSON que parece correcto?
Cinco sospechosos habituales: (1) additionalProperties: false — tus datos tienen una clave que el esquema no declaró, a menudo un typo o un campo nuevo; (2) type: "integer" vs "number" — JSON Schema trata 1.0 como number, no integer; (3) las keywords format (email, uri, uuid) rechazan cadenas mal formadas aunque parezcan correctas; (4) required en el nivel de anidamiento incorrecto — required debe ir junto a properties, no dentro de una; (5) el JSON tiene la cadena "42" donde el esquema espera el entero 42. La ruta del error indicará cuál es.
¿Admite $ref y referencias remotas a esquemas?
Los punteros $ref internos (#/$defs/foo, #/properties/bar) funcionan de forma nativa. Los $ref remotos a URLs externas están desactivados a propósito — descargar esquemas externos filtraría tu actividad de validación a terceros y rompería el modelo de privacidad. Para validar contra un esquema multiarchivo, incorpora las definiciones referenciadas en un solo documento usando $defs, o ejecuta la validación en tu propia CI con Ajv donde los refs remotos sí son apropiados.
¿Qué hace additionalProperties: false?
additionalProperties: false rechaza cualquier clave que no esté declarada en properties. Es la keyword más útil para endurecer contratos — sin ella, los esquemas son abiertos por defecto y aceptan silenciosamente campos mal escritos o maliciosos. Activa siempre additionalProperties: false en contratos de entrada (cuerpos de petición, archivos de configuración, mensajes de cola). Déjalo en true (u omítelo) solo cuando el esquema sea una descripción parcial de un documento mayor.
¿Cómo valido JSON contra un esquema en Node.js o Python?
Node: instala Ajv (npm i ajv ajv-formats), llama a new Ajv().compile(schema) y luego validate(data). Python: instala jsonschema (pip install jsonschema), llama a jsonschema.validate(data, schema). Para TypeScript, genera tipos a partir del esquema con json-schema-to-typescript para que el tiempo de compilación y el de ejecución no se desincronicen. Nuestra guía de validación JSON Schema tiene recetas listas para copiar y pegar para Node, Python y navegador.
¿Cuál es la diferencia entre oneOf, anyOf y allOf?
allOf — debe coincidir con todos los subesquemas (intersección, usado para composición). anyOf — debe coincidir con al menos uno (unión, fast-fail). oneOf — debe coincidir con exactamente uno (unión discriminada, más lento pero más estricto). Usa oneOf para uniones discriminadas como eventos de webhook etiquetados por type; usa anyOf para uniones permisivas; usa allOf para extender un esquema base con restricciones adicionales. oneOf es el más lento porque prueba todas las ramas — prefiere anyOf cuando no se requiere exactamente uno.
¿Admite esquemas OpenAPI?
OpenAPI 3.1 usa Draft 2020-12 de forma nativa, así que cualquier componente de esquema OpenAPI 3.1 se pega directamente. OpenAPI 3.0 usa un subconjunto de Draft 4 que es mayormente compatible — puedes encontrar casos límite con nullable: true (sintaxis 3.0) que Draft 2020-12 expresa como type: ["string", "null"]. Para validar documentos OpenAPI completos (paths, operations, security), usa un linter dedicado de OpenAPI como Spectral; esta herramienta se centra en la parte del esquema.
¿Por qué el validador dice que mi JSON Schema es inválido?
JSON Schema es un documento JSON que debe ser JSON válido antes de poder ser un esquema válido. Causas comunes: una coma final en un objeto properties, comillas simples en lugar de dobles, $schema apuntando a un URL de draft inexistente, o required listado como cadena en lugar de array. Formatea el esquema en el Formateador JSON primero para detectar problemas de sintaxis y luego pégalo aquí para validación semántica.
¿La herramienta envía mi JSON o esquema a un servidor?
No. Todo el parseo y la validación se ejecutan localmente en tu navegador. Tu JSON, tu esquema y los resultados de validación nunca salen de tu equipo — sin carga, sin localStorage de las entradas, sin analítica sobre lo que pegas. Seguro para contratos de API propietarios, archivos de configuración internos y payloads sensibles. Solo tu selección de draft persiste en localStorage para sobrevivir a una recarga; borra los datos del navegador para limpiarlo.
¿Puedo validar JSON Lines (NDJSON) o varios documentos?
Esta herramienta valida un documento por ejecución. Para JSON Lines, valida cada línea individualmente o usa Ajv en Node con un esquema y un parser de stream como JSONStream. Para validación por lotes de grandes datasets, prefiere la línea de comandos — ajv-cli o check-jsonschema (Python) procesan miles de archivos por segundo con una sola compilación de esquema.

Herramientas relacionadas

Ver todas las herramientas →