Ejemplos
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["email"], "properties": { "email": { "type": "string", "format": "email" } } }{ "type": "array", "items": { "type": "number" }, "minItems": 1, "uniqueItems": true }{ "type": "string", "pattern": "^[A-Z]{3}-\\d{4}$", "description": "Código de producto" }{ "oneOf": [{ "type": "string" }, { "type": "number" }] }{ "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "minLength": 1 } } }
Preguntas frecuentes
¿Cuál es la diferencia entre draft-07 y draft 2020-12?
Draft 2020-12 reemplaza 'definitions' por '$defs', introduce '$dynamicRef' para recursión dinámica, y mejora el vocabulario de anotaciones ('deprecated', 'readOnly'). La mayoría de librerías aún usan draft-07; migrá solo si necesitás features nuevas y tu validador lo soporta.
¿JSON Schema valida datos o solo estructura?
Valida ambos: estructura (tipos, propiedades requeridas) y datos (rangos, patrones, enums). Pero no lógica de negocio compleja (ej: 'este email debe existir en la DB'). Para eso usás validadores custom después de pasar el schema.
¿Cómo manejo schemas grandes sin duplicación?
Usá '$ref' para referenciar definiciones comunes dentro del mismo schema ('$defs') o en archivos externos. Herramientas como '$RefParser' resuelven referencias y producen un schema completo. También podés usar 'allOf' para componer schemas pequeños en uno grande.