ToolDeck

Validador de JSON Schema

Valida datos JSON contra un JSON Schema (Draft 7)

Prueba un ejemplo

Datos JSON

JSON Schema

Se ejecuta localmente · Es seguro pegar secretos
Se ejecuta localmente · Es seguro pegar secretos

¿Qué es la validación de JSON Schema?

La validación de JSON Schema es el proceso de comprobar si un documento JSON cumple con un conjunto de restricciones estructurales y de valores definidas en un JSON Schema. El schema en sí es un documento JSON que describe la forma esperada de tus datos: qué propiedades son obligatorias, qué tipos deben tener, los rangos permitidos para números, patrones de cadenas, longitudes de arrays y más. La especificación de JSON Schema se mantiene en json-schema.org y se publica como una serie de borradores IETF; Draft 7 y Draft 2020-12 son los más adoptados.

Mientras que la validación JSON simple solo comprueba la sintaxis (¿están los corchetes correctamente cerrados? ¿están las cadenas entre comillas?), la validación por schema va más allá. Responde preguntas como: ¿la respuesta de esta API contiene un campo "id" que siempre es un entero? ¿El campo "status" toma uno de tres valores permitidos? ¿Los objetos anidados tienen la estructura correcta? Este tipo de verificación estructural detecta errores que las comprobaciones de sintaxis no detectan, porque un JSON sintácticamente válido puede ser semánticamente incorrecto para tu aplicación.

JSON Schema se usa en definiciones OpenAPI/Swagger, validación de archivos de configuración, validación de formularios, restricciones de documentos en bases de datos y pruebas automatizadas. Herramientas como Ajv (JavaScript), jsonschema (Python) y check-jsonschema (CLI) implementan la especificación para que puedas validar datos mediante programación. Este validador online te permite pegar un schema y un documento de datos para comprobar la conformidad al instante, sin instalar ninguna librería.

¿Por qué usar un validador de JSON Schema online?

Escribir schemas y depurar errores de validación a mano es lento. Un validador de JSON Schema online te da retroalimentación inmediata sobre si tus datos coinciden con tu schema, con mensajes de error claros que apuntan exactamente a la propiedad que falló.

Retroalimentación de validación instantánea
Pega tu schema y tus datos, y ve los resultados de validación en tiempo real. Cada error muestra la ruta JSON y la restricción específica que falló, para que puedas corregir problemas sin leer la salida de una librería de validación.
🔒
Privacidad ante todo — procesamiento solo en el navegador
Tus datos JSON nunca salen de tu navegador. Toda la validación se ejecuta localmente en JavaScript. Sin servidor, sin registros, sin retención de datos. Seguro para schemas que describen APIs internas o contienen nombres de campos propietarios.
🎯
Validación con soporte de Draft
El validador maneja palabras clave de Draft 7 incluyendo type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf y additionalProperties. Prueba tu schema aquí antes de integrarlo en tu pipeline de compilación o suite de pruebas.
📋
Sin cuenta ni instalación
Abre la página, pega tu JSON y valida. Sin npm install, sin paquete pip, sin imagen Docker. Útil cuando necesitas una comprobación rápida de schema en un equipo donde no puedes instalar herramientas de desarrollo.

Casos de uso de la validación de JSON Schema

Pruebas de contrato de API
Valida respuestas de API contra el schema definido en tu spec OpenAPI. Detecta cambios que rompen la compatibilidad, como un campo que cambia de entero a cadena, antes de que lleguen a producción.
Verificación de archivos de configuración
Comprueba que los archivos de configuración JSON para pipelines de CI/CD, manifiestos de Kubernetes o configuraciones de aplicación coincidan con el schema esperado antes de hacer commit. Previene fallos de despliegue causados por claves faltantes o mal escritas.
Puertas en pipelines de DevOps
Añade validación de schema como un paso de CI para rechazar payloads que violen el contrato. Funciona para archivos de variables de Terraform, entradas de GitHub Actions o cualquier JSON estructurado consumido por automatizaciones.
Revisión de datos de prueba y QA
Verifica que los fixtures de prueba y los archivos de datos simulados se ajusten al mismo schema que espera tu aplicación. Los datos de prueba que no coinciden son una fuente habitual de resultados de prueba falsos positivos.
Ingesta en pipelines de datos
Valida registros JSON entrantes en el borde de un pipeline de datos. La validación por schema filtra eventos malformados antes de que lleguen a tu almacén de datos, reduciendo los costes de limpieza posteriores.
Aprendizaje de la sintaxis de JSON Schema
Experimenta con palabras clave del schema de forma interactiva. Escribe un schema, pega datos de prueba y observa qué restricciones se cumplen o fallan. Más rápido que escribir un script y ejecutarlo desde la terminal cada vez.

Referencia de palabras clave de JSON Schema

Un JSON Schema se construye a partir de palabras clave que imponen restricciones sobre los datos validados. La tabla siguiente lista las palabras clave más usadas en Draft 7 y versiones posteriores. Cualquier palabra clave puede combinarse con otras en el mismo objeto de schema.

Palabra clavePropósitoEjemplo
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" } } }

Comparación de versiones de JSON Schema: Draft 7 vs 2019-09 vs 2020-12

JSON Schema ha pasado por varias versiones de borrador. Draft 7 (publicado en 2018) es el más ampliamente soportado en herramientas. Draft 2019-09 introdujo $defs (en sustitución de definitions), unevaluatedProperties y $recursiveRef. Draft 2020-12 (la última versión estable) reemplazó $recursiveRef por $dynamicRef e introdujo prefixItems para la validación de tuplas. Al elegir un borrador, comprueba que tu librería de validación lo soporte. Ajv soporta los tres borradores. La librería jsonschema de Python soporta hasta 2020-12 desde la versión 4.0.

CaracterísticaDraft 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

Ejemplos de código

Estos ejemplos muestran cómo validar JSON contra un schema mediante programación. Cada uno usa una librería bien mantenida para su ecosistema de lenguaje.

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

Preguntas frecuentes

¿Cuál es la diferencia entre validación JSON y validación de JSON Schema?
La validación JSON comprueba si una cadena es JSON sintácticamente válido: corchetes correctamente anidados, claves entre comillas, sin comas finales. La validación de JSON Schema va un paso más allá y comprueba si los datos JSON analizados coinciden con un contrato estructural: tipos correctos, campos requeridos presentes, valores dentro de rangos permitidos. Necesitas JSON válido antes de poder aplicar un schema, pero un JSON válido puede igualmente fallar la validación por schema.
¿Qué versión de JSON Schema debería usar?
Draft 7 es la opción más segura por defecto. Tiene el mayor soporte de librerías entre lenguajes y cubre las palabras clave que la mayoría de proyectos necesitan: type, properties, required, enum, pattern, anyOf, oneOf, allOf y $ref. Usa Draft 2020-12 si necesitas funciones como prefixItems para validación de tuplas, $dynamicRef para schemas extensibles, o unevaluatedProperties para formas estrictas de objetos. Consulta la documentación de tu librería de validación para confirmar el soporte del borrador antes de actualizar.
¿Cómo funciona $ref en JSON Schema?
La palabra clave $ref te permite referenciar otro schema por URI en lugar de duplicarlo. Un valor como "$ref": "#/$defs/address" apunta a un schema definido en la sección $defs del mismo documento. También puedes referenciar archivos externos con "$ref": "https://example.com/schemas/address.json". En Draft 7, $ref reemplaza todas las palabras clave hermanas en el mismo objeto. En Draft 2019-09 y versiones posteriores, las palabras clave hermanas se aplican junto con $ref.
¿Cuál es la diferencia entre anyOf, oneOf y allOf?
allOf requiere que los datos coincidan con todos los sub-schemas del array. anyOf requiere coincidencia con al menos uno. oneOf requiere coincidencia con exactamente uno y falla si los datos coinciden con cero o más de uno. Para campos anulables, anyOf con un tipo y null es habitual: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Usa oneOf cuando los sub-schemas sean mutuamente excluyentes, como en uniones etiquetadas.
¿Puede JSON Schema validar objetos y arrays anidados?
Sí. Usa la palabra clave properties para definir schemas para claves de objetos anidados, y la palabra clave items para definir un schema que debe cumplir cada elemento del array. Puedes anidarlos a cualquier profundidad. Para arrays donde cada posición tiene un schema diferente (tuplas), usa prefixItems en Draft 2020-12 o la forma de array de items en Draft 7.
¿Los datos que pego en esta herramienta se envían a un servidor?
No. El validador se ejecuta completamente en tu navegador mediante JavaScript. Tus datos JSON y schema nunca se transmiten a ningún servidor. Puedes verificarlo abriendo el inspector de red de tu navegador mientras usas la herramienta.
¿Cómo puedo validar JSON Schema en un pipeline de CI/CD?
Usa un validador por línea de comandos como check-jsonschema (Python/pip) o ajv-cli (Node.js/npm). Ambos aceptan un archivo de schema y uno o más archivos de datos como argumentos. Añade el comando de validación como un paso en tu configuración de CI. Si la validación falla, el proceso sale con un código distinto de cero, lo que bloquea el pipeline. Para GitHub Actions, también puedes usar la acción check-jsonschema directamente.