Saltar a contenido

JSON Logic Operators

JSON Logic es un sistema de reglas basado en JSON que permite crear transformaciones complejas de datos de manera declarativa. Fracttal ETL Hub implementa un conjunto extendido de operadores JSON Logic para manipular datos durante las transformaciones ETL.

Operación Básica

{
  "transform": {
    "var": ["data", "field_name"]
  }
}

Operadores de Comparación

Igualdad (==)

{
  "transform": {
    "==": [
      {"var": "status"},
      "active"
    ]
  }
}

Mayor que (>)

{
  "transform": {
    ">": [
      {"var": "age"},
      18
    ]
  }
}

Menor o igual (<=)

{
  "transform": {
    "<=": [
      {"var": "score"},
      100
    ]
  }
}

Operadores Lógicos

AND (and)

{
  "transform": {
    "and": [
      {">": [{"var": "age"}, 18]},
      {"==": [{"var": "status"}, "active"]}
    ]
  }
}

OR (or)

{
  "transform": {
    "or": [
      {"==": [{"var": "type"}, "admin"]},
      {"==": [{"var": "type"}, "moderator"]}
    ]
  }
}

NOT (!)

{
  "transform": {
    "!": {
      "==": [{"var": "deleted"}, true]
    }
  }
}

Operadores de Datos

Acceso a Variables (var)

{
  "transform": {
    "var": "field_name"
  }
}
{
  "transform": {
    "var": ["data", "nested", "field"]
  }
}

Valor por Defecto (default)

{
  "transform": {
    "default": [
      {"var": "optional_field"},
      "default_value"
    ]
  }
}

Operadores de Arrays

Map (map)

{
  "transform": {
    "map": [
      {"var": "items"},
      {"var": "name"}
    ]
  }
}

Filter (filter)

{
  "transform": {
    "filter": [
      {"var": "users"},
      {">": [{"var": "age"}, 21]}
    ]
  }
}

Reduce (reduce)

{
  "transform": {
    "reduce": [
      {"var": "numbers"},
      {"+": [{"var": "current"}, {"var": "accumulator"}]},
      0
    ]
  }
}

Operadores Matemáticos

Suma (+)

{
  "transform": {
    "+": [
      {"var": "price"},
      {"var": "tax"}
    ]
  }
}

Multiplicación (*)

{
  "transform": {
    "*": [
      {"var": "quantity"},
      {"var": "unit_price"}
    ]
  }
}

Módulo (%)

{
  "transform": {
    "%": [
      {"var": "number"},
      2
    ]
  }
}

Operadores de Texto

Concatenación (cat)

{
  "transform": {
    "cat": [
      {"var": "first_name"},
      " ",
      {"var": "last_name"}
    ]
  }
}

Substring (substr)

{
  "transform": {
    "substr": [
      {"var": "text"},
      0,
      10
    ]
  }
}

Operadores de Fecha/Hora

Fecha Actual (now)

{
  "transform": {
    "now": []
  }
}

Formatear Fecha (date)

{
  "transform": {
    "date": [
      {"var": "timestamp"},
      "YYYY-MM-DD"
    ]
  }
}

Operadores Personalizados de Fracttal

Rename (rename)

{
  "transform": {
    "rename": [
      [{"var": "old_field"}, "new_field", "string"]
    ]
  }
}

Lookup (lookup)

{
  "transform": {
    "lookup": [
      {"var": "category_id"},
      "categories",
      "id",
      "name"
    ]
  }
}

Hash (hash)

{
  "transform": {
    "hash": [
      {"var": "email"},
      "md5"
    ]
  }
}

Ejemplos Complejos

Transformación de Usuario

{
  "transform": {
    "rename": [
      [{"var": "firstName"}, "nombre", "string"],
      [{"var": "lastName"}, "apellido", "string"],
      [{"var": "birthDate"}, "fecha_nacimiento", "date"]
    ],
    "filter": {
      "and": [
        {">": [{"var": "age"}, 18]},
        {"==": [{"var": "active"}, true]}
      ]
    }
  }
}

Cálculo de Totales

{
  "transform": {
    "+": [
      {"*": [{"var": "quantity"}, {"var": "unit_price"}]},
      {"*": [{"var": "quantity"}, {"var": "unit_price"}, {"var": "tax_rate"}]}
    ]
  }
}

Validación de Reglas

JSON Logic permite crear validaciones complejas:

{
  "validate": {
    "and": [
      {"required": ["name", "email"]},
      {"email": {"var": "email"}},
      {"min": [{"var": "age"}, 0]},
      {"max": [{"var": "age"}, 150]}
    ]
  }
}

Mejores Prácticas

  1. Usa nombres descriptivos para las variables en tus reglas
  2. Prueba tus reglas con datos de ejemplo antes de desplegar
  3. Documenta reglas complejas con comentarios
  4. Usa operadores anidados para lógica compleja
  5. Valida la estructura de tus datos de entrada

Referencias