Skip to content
jsonforge.app
Volver al blog
Tutorial12 min de lectura

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.

Un esquema de objeto con campos obligatorios y restricciones de tipo.
{
  "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.

Esquema de registro de usuario: estricto por defecto.
{
  "$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