Validacion de JSON Schema: Guia Completa para Definir y Validar Datos JSON
Aprende como JSON Schema funciona como un contrato para tus datos -- desde tipos basicos y campos obligatorios hasta validacion de formatos, versiones de borrador y casos de uso reales para APIs y archivos de configuracion.
Que es JSON Schema?
JSON Schema es un lenguaje declarativo que te permite describir la estructura, contenido y restricciones de un documento JSON. Piensa en el como un contrato entre un productor y un consumidor de datos. El productor dice "siempre enviare un objeto con un string name y un entero age", y el consumidor puede verificar que cada payload entrante realmente cumple esa promesa antes de procesarlo.
Esto importa porque JSON en si mismo no tiene esquema. Cualquier valor JSON valido -- un string, un numero, un objeto profundamente anidado con claves aleatorias -- es perfectamente legal. Esa libertad es maravillosa para prototipar rapido, pero se convierte en una carga el momento en que dos sistemas necesitan ponerse de acuerdo sobre como deben verse los datos.
Por que JSON Schema Importa para las APIs
Las APIs REST se comunican a traves de payloads JSON, y cada endpoint tiene una forma implicita: campos obligatorios, tipos esperados, restricciones de valor. JSON Schema hace esa forma explicita y legible por maquinas. Una vez que tienes un esquema, puedes:
- Validar solicitudes en el servidor antes de que lleguen a tu logica de negocio, retornando errores 400 claros en lugar de 500 cripticos.
- Validar respuestas en pruebas de integracion para capturar cambios que rompen antes de que lleguen a produccion.
- Generar documentacion automaticamente -- herramientas como Swagger/OpenAPI usan JSON Schema como columna vertebral de sus definiciones de tipos.
- Generar codigo -- herramientas de esquema a TypeScript, esquema a Go struct y esquema a Python dataclass eliminan definiciones de tipos manuales.
Fundamentos de JSON Schema
Cada JSON Schema es en si mismo un objeto JSON. El esquema mas simple posible es un objeto vacio {}, que acepta cualquier JSON valido. Desde ahi, agregas palabras clave para estrechar lo que esta permitido.
Tipos Primitivos
La palabra clave type es el fundamento. JSON Schema reconoce seis tipos primitivos mas un modificador estructural:
| Tipo | Ejemplo JSON | Notas |
|---|---|---|
| string | "hola" | Valores de texto. Se puede restringir con minLength, maxLength, pattern. |
| number | 3.14 | Cualquier valor numerico incluyendo decimales. Usa minimum, maximum, multipleOf. |
| integer | 42 | Solo numeros enteros. Mismas restricciones que number. |
| boolean | true | Solo true o false. No necesita restricciones adicionales. |
| object | {"clave": "valor"} | Pares clave-valor. Se define con properties, required, additionalProperties. |
| array | [1, 2, 3] | Listas ordenadas. Usa items, minItems, maxItems, uniqueItems. |
| null | null | La ausencia de un valor. A menudo se combina con otro tipo. |
Propiedades y Campos Obligatorios
Para objetos, la palabra clave properties define que claves se esperan y como debe verse cada una. La palabra clave required lista cuales de esas claves deben estar presentes.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name", "email"]
}
Este esquema dice: los datos deben ser un objeto; debe tener un string name no vacio y un string email valido; age es opcional pero si esta presente debe ser un entero no negativo.
Controlando Propiedades Adicionales
Por defecto, los objetos aceptan cualquier clave extra mas alla de lo que properties define. Configurar "additionalProperties": false hace el esquema estricto. Esto es valioso para APIs donde campos inesperados pueden indicar un error del cliente o una incompatibilidad de version.
additionalProperties: false junto con palabras clave de composicion como allOf, las propiedades definidas en otros sub-esquemas pueden ser rechazadas. Esta es una de las trampas mas comunes en JSON Schema.
Validacion de Formato
La palabra clave format proporciona validacion semantica mas alla de los tipos basicos. Un campo puede ser un string, pero no cualquier string -- debe ser una direccion de email, una fecha, un URI o una direccion IP.
Formatos Incorporados
| Formato | Valor de Ejemplo | Caso de Uso |
|---|---|---|
| date-time | 2026-03-27T10:30:00Z | Marcas de tiempo ISO 8601 para eventos y registros |
| date | 2026-03-27 | Fechas de calendario sin hora |
[email protected] | Formularios de contacto, registro de usuarios | |
| uri | https://example.com/api | URLs de webhook, enlaces de recursos |
| uuid | 550e8400-e29b-41d4-a716-446655440000 | Identificadores unicos, claves primarias |
| ipv4 | 192.168.1.1 | Configuracion de red, direcciones de servidor |
| ipv6 | 2001:db8::1 | Direcciones de red modernas |
| hostname | api.example.com | Nombres DNS, descubrimiento de servicios |
Formato como Anotacion vs. Asercion
Un matiz importante: por defecto, la palabra clave format es una anotacion, no una asercion. En Draft 2020-12, debes habilitar explicitamente la asercion de formato si quieres que la validacion falle con formatos invalidos.
format con un regex pattern si la validacion estricta es critica para tu caso de uso.
Versiones de Borrador: Draft-07 vs 2020-12
JSON Schema ha evolucionado a traves de varias versiones de borrador. Las dos que encontraras con mas frecuencia son Draft-07 (publicado en 2018) y Draft 2020-12 (la version estable actual).
Diferencias Clave
| Caracteristica | Draft-07 | Draft 2020-12 |
|---|---|---|
| $schema URI | http://json-schema.org/draft-07/schema# | https://json-schema.org/draft/2020-12/schema |
| prefixItems | No disponible | Reemplaza validacion de tuplas |
| $dynamicRef | No disponible | Nuevo -- referencias de esquema dinamicas |
| unevaluatedProperties | No disponible | Resuelve el problema additionalProperties + allOf |
| Soporte de bibliotecas | Excelente | Bueno y creciendo |
Cual Version Elegir?
Elige Draft-07 si tu ecosistema ya lo usa o si necesitas maxima compatibilidad con herramientas existentes.
Elige Draft 2020-12 si empiezas un nuevo proyecto sin restricciones heredadas o si necesitas unevaluatedProperties para composicion limpia de esquemas.
Conclusion
Para la mayoria de proyectos nuevos en 2026, Draft 2020-12 es la mejor opcion predeterminada. Corrige puntos de dolor reales y el soporte de bibliotecas se ha puesto al dia.
Como Usar Nuestro Generador de JSON Schema
Nuestro Generador de JSON Schema gratuito toma cualquier payload JSON y produce un esquema valido automaticamente. Todo se ejecuta en tu navegador, asi que tus datos nunca salen de tu dispositivo.
Guia Paso a Paso
- Abre la herramienta Generador de JSON Schema.
- Pega tu JSON en el area de entrada.
- Haz clic en Generar y la herramienta analizara cada campo, inferira tipos, detectara formatos y identificara propiedades obligatorias.
- Revisa la salida -- el esquema generado aparece en el panel de salida.
- Cambia a la pestana Validar para probar tu esquema contra nuevos payloads JSON.
- Copia el esquema con un clic e integralo en tu proyecto.
Nota de Privacidad
Nuestro Generador de JSON Schema se ejecuta 100% en tu navegador. Tus datos JSON, esquemas generados y resultados de validacion nunca salen de tu dispositivo.
Genera tu JSON Schema al Instante
Pega cualquier payload JSON y obtiene un esquema listo para usar con inferencia de tipos, campos obligatorios y deteccion de formato -- 100% en tu navegador.