JSON Logic Operators
JSON Logic is a JSON-based rule system that allows creating complex data transformations declaratively. Fracttal ETL Hub implements an extended set of JSON Logic operators to manipulate data during ETL transformations.
Basic Operation
{
"transform": {
"var": ["data", "field_name"]
}
}
Comparison Operators
Equality (==)
{
"transform": {
"==": [
{"var": "status"},
"active"
]
}
}
Greater than (>)
{
"transform": {
">": [
{"var": "age"},
18
]
}
}
Less than or equal (<=)
{
"transform": {
"<=": [
{"var": "score"},
100
]
}
}
Logical Operators
AND (and)
{
"transform": {
"and": [
{">": [{"var": "age"}, 18]},
{"==": [{"var": "status"}, "active"]}
]
}
}
OR (or)
{
"transform": {
"or": [
{"==": [{"var": "role"}, "admin"]},
{"==": [{"var": "role"}, "moderator"]}
]
}
}
NOT (!)
{
"transform": {
"!": {"==": [{"var": "status"}, "deleted"]}
}
}
String Operators
Concatenation (cat)
{
"transform": {
"cat": [
{"var": "first_name"},
" ",
{"var": "last_name"}
]
}
}
Substring (substr)
{
"transform": {
"substr": [
{"var": "email"},
0,
5
]
}
}
Array Operators
Map (map)
{
"transform": {
"map": [
{"var": "users"},
{"var": "name"}
]
}
}
Filter (filter)
{
"transform": {
"filter": [
{"var": "users"},
{">": [{"var": "age"}, 18]}
]
}
}
Reduce (reduce)
{
"transform": {
"reduce": [
{"var": "numbers"},
{"+": [{"var": "accumulator"}, {"var": "current"}]},
0
]
}
}
Custom Operators
Add Field (add)
Adds a new field to the data:
{
"transform": {
"add": [
{"var": "first_name"},
" ",
{"var": "last_name"},
"full_name",
"string"
]
}
}
Rename Field (rename)
Renames an existing field:
{
"transform": {
"rename": [
[{"var": "old_field"}, "new_field", "string"]
]
}
}
Date Format (date_format)
Formats date fields:
{
"transform": {
"date_format": [
{"var": "created_at"},
"%Y-%m-%d",
"formatted_date",
"string"
]
}
}
Complex Examples
User Validation
{
"transform": {
"and": [
{"!=": [{"var": "email"}, null]},
{">": [{"var": "age"}, 0]},
{"in": [{"var": "status"}, ["active", "pending"]]}
]
}
}
Data Enrichment
{
"transform": {
"if": [
{">": [{"var": "score"}, 80]},
"excellent",
{
"if": [
{">": [{"var": "score"}, 60]},
"good",
"needs_improvement"
]
}
]
}
}