JSON1

Validación y Schema JSON

Guía completa para usar JSON Schema para asegurar calidad y consistencia de datos

¿Qué es la Validación JSON?

La validación JSON es el proceso de asegurar que los datos JSON cumplan con una estructura y reglas predefinidas. A través de la validación, podemos:

  • • Asegurar formato correcto de datos
  • • Verificar existencia de campos obligatorios
  • • Comprobar coincidencia de tipos de datos
  • • Aplicar restricciones de reglas de negocio
  • • Proporcionar información clara de errores

Beneficios de la Validación

  • • Mejorar calidad de datos
  • • Reducir errores en tiempo de ejecución
  • • Aumentar robustez de API
  • • Mejorar experiencia del usuario
  • • Facilitar depuración y mantenimiento

Momentos de Validación

  • • Validación de entrada del cliente
  • • Verificación de datos de interfaz API
  • • Validación antes de almacenar en base de datos
  • • Al cargar archivos de configuración
  • • Proceso de importación y exportación de datos

Fundamentos de JSON Schema

Estructura Básica de Schema

Ejemplo de Schema Simple

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://ejemplo.com/usuario.schema.json",
  "title": "Usuario",
  "description": "Estructura de información de usuario",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "minimum": 1
    },
    "nombre": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "edad": {
      "type": "integer",
      "minimum": 0,
      "maximum": 150
    }
  },
  "required": ["id", "nombre", "email"],
  "additionalProperties": false
}

Datos JSON Válidos Correspondientes

{
  "id": 123,
  "nombre": "Juan Pérez",
  "email": "juan@ejemplo.com",
  "edad": 28
}

Ejemplo de Datos JSON Inválidos

{
  "id": "abc",              // Error: debería ser entero
  "nombre": "",             // Error: longitud no puede ser 0
  "email": "email-inválido", // Error: formato de email incorrecto
  "edad": -5                // Error: edad no puede ser negativa
}

Explicación de Palabras Clave del Schema

Palabras Clave Básicas

$schemaEspecifica versión del Schema
$idIdentificador único del Schema
titleTítulo del Schema
descriptionDescripción del Schema
typeTipo de datos

Palabras Clave de Restricción

requiredLista de campos obligatorios
propertiesDefinición de propiedades de objeto
minimumValor mínimo de número
maximumValor máximo de número
minLengthLongitud mínima de cadena

Validación de Tipos de Datos

Validación de Cadenas (string)

Restricciones de Validación

  • minLength / maxLength - Limitación de longitud
  • pattern - Coincidencia de expresiones regulares
  • format - Formato predefinido (email, date, uri, etc.)
  • enum - Limitación de valores enumerados

Ejemplo de Schema

{
  "type": "string",
  "minLength": 3,
  "maxLength": 50,
  "pattern": "^[A-Za-z0-9]+$",
  "format": "email"
}
✅ Valores Válidos
"usuario@ejemplo.com"
❌ Valores Inválidos
"ab"  // Longitud insuficiente
"usuario@"  // Formato incorrecto

Validación de Números (number/integer)

Restricciones de Validación

  • minimum / maximum - Rango de valores
  • exclusiveMinimum / exclusiveMaximum - Rango exclusivo
  • multipleOf - Restricción de múltiplos
  • Distinción entre integer vs number

Ejemplo de Schema

{
  "type": "integer",
  "minimum": 1,
  "maximum": 100,
  "multipleOf": 5
}
✅ Valores Válidos
15, 25, 50
❌ Valores Inválidos
0    // Menor que valor mínimo
150  // Excede valor máximo
13   // No es múltiplo de 5

Validación de Booleanos (boolean)

Restricciones de Validación

  • Solo acepta true o false
  • No acepta cadenas "true"/"false"
  • No acepta números 1/0

Ejemplo de Schema

{
  "type": "boolean"
}
✅ Valores Válidos
true, false
❌ Valores Inválidos
"true"  // Cadena
1       // Número
null    // Valor nulo

Validación de Arrays (array)

Restricciones de Validación

  • items - Tipo de elementos del array
  • minItems / maxItems - Limitación de longitud
  • uniqueItems - Restricción de unicidad
  • additionalItems - Control de elementos adicionales

Ejemplo de Schema

{
  "type": "array",
  "items": {"type": "string"},
  "minItems": 1,
  "maxItems": 5,
  "uniqueItems": true
}
✅ Valores Válidos
["a", "b", "c"]
❌ Valores Inválidos
[]           // Longitud insuficiente
["a", "a"]   // No único
[1, 2, 3]    // Error de tipo

Validación de Objetos (object)

Restricciones de Validación

  • properties - Definición de propiedades
  • required - Propiedades obligatorias
  • additionalProperties - Control de propiedades adicionales
  • minProperties / maxProperties - Limitación de cantidad de propiedades

Ejemplo de Schema

{
  "type": "object",
  "properties": {
    "nombre": {"type": "string"}
  },
  "required": ["nombre"],
  "additionalProperties": false
}
✅ Valores Válidos
{"nombre": "Juan"}
❌ Valores Inválidos
{}               // Falta campo obligatorio
{"nombre": "Juan", "edad": 25}  // No permite propiedades adicionales

Estrategias de Manejo de Errores

Estructura de Información de Error de Validación

{
  "valido": false,
  "errores": [
    {
      "rutaInstancia": "/usuario/email",
      "rutaSchema": "#/properties/usuario/properties/email/format",
      "palabraClave": "format",
      "parametros": {"format": "email"},
      "mensaje": "debe coincidir con formato \"email\"",
      "datos": "email-inválido"
    },
    {
      "rutaInstancia": "/usuario/edad",
      "rutaSchema": "#/properties/usuario/properties/edad/minimum",
      "palabraClave": "minimum", 
      "parametros": {"minimum": 0},
      "mensaje": "debe ser >= 0",
      "datos": -5
    }
  ]
}

Explicación de Campos de Información de Error

  • rutaInstancia: Ruta de datos con error
  • rutaSchema: Ruta correspondiente del Schema
  • palabraClave: Palabra clave de validación fallida
  • parametros: Parámetros de validación
  • mensaje: Descripción del error
  • datos: Datos reales con error

Manejo de Errores Amigable al Usuario

  • • Convertir errores técnicos en información comprensible para el usuario
  • • Proporcionar sugerencias de reparación
  • • Mostrar errores agrupados por campo
  • • Resaltar ubicaciones de error
  • • Proporcionar ejemplos de formato correcto

❌ Información de Error Pobre

"debe coincidir con formato 'email'"
"data.edad debe ser >= 0"

Problema: Terminología técnica, difícil de entender para el usuario

✅ Información de Error Buena

"Formato de email incorrecto, por favor ingrese un email válido"
"La edad no puede ser negativa, por favor ingrese 0 o un entero positivo"

Ventaja: Claro y comprensible, proporciona soluciones

Referencia Rápida

Checklist de Validación JSON

Definir Schema completo
Especificar campos obligatorios
Configurar restricciones de tipo
Implementar manejo de errores amigable

Herramientas Relacionadas

Leer en otro idioma