Nav

Defining DataWeave Functions

You can define your own DataWeave functions using the fun declaration in the header of a DataWeave script. For example, this a simple DataWeave function accepts a single String argument that outputs "HELLO":


         
      
1
2
3
4
5
%dw 2.0
output application/json
fun toUpper(aString) = upper(aString)
---
toUpper("hello")

The argument to a DataWeave function can be any DataWeave expression. This function also outputs "HELLO":


         
      
1
2
3
4
5
%dw 2.0
output application/json
fun toUpper(aString) = upper(aString)
---
toUpper("h" ++ "el" ++ lower("LO") )

To test the type of the argument passed into your function, you can perform pattern matching with the built-in match operation.

Example: Function that Uses Pattern Matching

         
      
1
2
3
4
5
6
7
8
9
%dw 2.0
output application/json
fun toUpper(aString)
= aString match {
  case is String -> upper(aString)
  else -> null
}
---
toUpper("h" ++ "el" ++ lower("LO") )

This example creates a function that reformats a numeric string into a common phone number format:

Example: toPhoneFormat() Function

         
      
1
2
3
4
5
6
%dw 2.0
output application/json
fun toPhoneFormat(str: String) =
    "(" ++ str[0 to 2] ++ ") " ++ str[3 to 5] ++ "-" ++ str[6 to 9]
---
toPhoneFormat("1234567890")
Output of toPhoneFormat("1234567890")
"(123) 456-7890"

In this topic: