Contact Free trial Login

Work with Functions and Lambdas in DataWeave

In DataWeave, functions and lambdas (anonymous functions) can be passed as values or be assigned to variables. Before you begin, note that DataWeave 2.0 is for Mule 4 apps. For a Mule 3 app, refer to the DataWeave 1.0 documentation set in the Mule 3.9 documentation. For other Mule versions, you can use the version selector for the Mule Runtime table of contents.

When using lambdas within the body of a DataWeave file in conjunction with an function such as map, its attributes can either be explicitly named or left anonymous, in which case they can be referenced as $, $$, etc.

Declare and Invoke a Function

You can declare a function in the header or body of a DataWeave script by using the fun keyword. Then you can invoke the function at any point in the body of the script.

You refer to functions using this form: functionName() or functionName(arg1, arg2, argN)

You can pass an expression in between the parentheses for each argument. Each expression between the parentheses is evaluated, and the result is passed as an argument used in the execution of the function body.

Input
{
  "field1": "Annie",
  "field2": "Point",
  "field3": "Stuff"
}
Transform
%dw 2.0
output application/json
fun toUser(obj) = {
  firstName: obj.field1,
  lastName: obj.field2
}
---
{
  "user" : toUser(payload)
}
Output
{
  "user": {
    "firstName": "Annie",
    "lastName": "Point"
  }
}

Assign a Lambda to a Var

You can define a function as a variable with a constant directive through var

Input
{
  "field1": "Annie",
  "field2": "Point",
  "field3": "Stuff"
}
Transform
%dw 2.0
output application/json
var toUser = (user) -> {
  firstName: user.field1,
  lastName: user.field2
}
---
{
  "user" : toUser(payload)
}
Output
{
  "user": {
    "firstName": "Annie",
    "lastName": "Point"
  }
}

Use Named Parameters in a Lambda

This example uses a lambda with an attribute that is explicitly named as name.

Input
%dw 2.0
output application/json
var names = ["john", "peter", "matt"]
---
users: names map((name) -> upper(name))
Transform
{
  "users": ["JOHN","PETER","MATT"]
}

Use Anonymous Parameters in a Lambda

This example uses a lambda with an attribute that’s not explicitly named, and so is referred to by default as $.

Transform
%dw 2.0
output application/json
var names = ["john", "peter", "matt"]
---
users: names map upper($)
Output
{
  "users": ["JOHN","PETER","MATT"]
}

We use cookies to make interactions with our websites and services easy and meaningful, to better understand how they are used and to tailor advertising. You can read more and make your cookie choices here. By continuing to use this site you are giving us your consent to do this.