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
- Usa nombres descriptivos para las variables en tus reglas
- Prueba tus reglas con datos de ejemplo antes de desplegar
- Documenta reglas complejas con comentarios
- Usa operadores anidados para lógica compleja
- Valida la estructura de tus datos de entrada