La guía completa de JSON Schema (Draft 7)
JSON Schema es un contrato para tus datos: declara qué propiedades deben existir, qué tipos tienen y qué valores están permitidos. Esta guía cubre las palabras clave principales de Draft 7 con un ejemplo de API del mundo real.
¿Qué es JSON Schema?
Un JSON Schema es, en sí mismo, un documento JSON que describe la forma de otros datos JSON. Úsalo para validar cargas útiles de APIs, documentar los formatos esperados, generar código (TypeScript, Go) y detectar datos incorrectos antes de que lleguen a tu lógica.
Palabras clave principales
La palabra clave type restringe un valor a string, number, boolean, null, object o array. properties y required describen la forma del objeto; items describe los elementos del array.
{
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "number", "minimum": 0, "maximum": 150 },
"email": { "type": "string", "format": "email" }
},
"required": ["name", "email"]
}Más allá de type: enum restringe a un conjunto fijo, const exige un valor exacto, pattern coincide con una expresión regular, minLength/maxLength limitan la longitud de la cadena y additionalProperties: false prohíbe las claves desconocidas.
Un esquema de API del mundo real
Aquí hay un esquema para un endpoint de registro de usuario. Observa cómo cada restricción sirve también como documentación, y cómo required + additionalProperties: false hacen que el contrato sea estricto.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"username": { "type": "string", "pattern": "^[a-zA-Z0-9_]{3,30}$" },
"email": { "type": "string", "format": "email" },
"password": { "type": "string", "minLength": 8 },
"acceptTerms": { "type": "boolean", "const": true }
},
"required": ["username", "email", "password", "acceptTerms"],
"additionalProperties": false
}Buenas prácticas
Declara siempre $schema para que los validadores sepan a qué draft apuntas. Añade campos description: se convierten en documentación viva de la API. Prefiere format (email, uri) antes que expresiones regulares hechas a mano. Usa additionalProperties: false para APIs estrictas, pero permítelo cuando la extensibilidad importe. Evita los esquemas profundamente anidados: fatorízalos con $ref y definitions.
FAQ
- ¿Qué draft de JSON Schema cubre esta guía?
- Draft 7, la versión más ampliamente admitida. Cubre type, properties, required, items, enum, const, minimum/maximum, minLength/maxLength, pattern, format, additionalProperties, minItems/maxItems y uniqueItems.
- ¿TypeScript reemplaza a JSON Schema?
- No. Los tipos de TypeScript se borran en tiempo de compilación y no proporcionan validación en tiempo de ejecución. Para las cargas útiles de APIs, usa JSON Schema (o Zod) para validar en tiempo de ejecución y, opcionalmente, genera tipos de TypeScript a partir de él.
- ¿Puedo generar automáticamente un esquema a partir de JSON?
- Sí: infiere un esquema a partir de datos de ejemplo y luego refínalo añadiendo restricciones (required, pattern, límites de longitud). La generación te da un punto de partida, no un contrato terminado.
Artículos relacionados
¿Qué es JSON? Una guía completa para principiantes →
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos, fácil de leer para los humanos y de analizar para las máquinas. Aprende la sintaxis, los tipos de datos y la estructura que impulsan las APIs modernas.
La historia de JSON: del 2000 al estándar de la industria →
Recorre JSON desde la idea de Douglas Crockford en 2001, pasando por su adopción por Yahoo, hasta convertirse en el estándar ECMA-404 que impulsa el 90 % de las APIs modernas.
Ejemplos de JSON en 7 lenguajes: JavaScript, Python, Go, Rust, PHP, Java, C# →
Ejemplos listos para producción de análisis y serialización de JSON en siete lenguajes, con manejo de errores y buenas prácticas.