In DataWeave 2.0, functions are categorized into different modules:

  1. Core (dw::Core)
  2. Arrays (dw::core::Arrays)
  3. Binaries (dw::core::Binaries)
  4. Encryption (dw::Crypto)
  5. Diff (dw::util::Diff)
  6. Objects (dw::core::Objects)
  7. Runtime (dw::Runtime)
  8. Strings (dw::core::Strings)
  9. System (dw::System)
  10. URL (dw::core::URL)

Functions defined in the Core (dw::Core) module are imported automatically into your DataWeave scripts. To use other modules, we need to import them by adding the import directive to the head of the DataWeave script, for example:

import dw::core::Strings
import dasherize, underscore from dw::core::Strings
import * from dw::core::Strings

Sample Payload:

{
"firstName" : "Murali",
"lastName" : "Krishna",
"age" : "26",
"age" : "26"
}

1. Core (dw::Core)

Below are the DataWeave 2 core functions:

++ , –, abs, avg, ceil, contains, daysBetween, distinctBy, endsWith, filter, IsBlank, joinBy, min, max, etc.

  • result : [0, 1, 2] ++ [“a”, “b”, “c”] will gives us “result” : “[0, 1, 2, “a”, “b”, “c”]”
  • result : [0, 1, 1, 2] — [1,2] will gives us “result” : “[0]”
  • result : abs(-20) will gives us “result” : 20
  • average : avg([1, 1000]) will gives us “average” : 500.5
  • value : ceil(1.5) will gives us “value” : 2
  • result : payload contains “Krish” will gives us “result” : true
  • days: daysBetween(“2016-10-01T23:57:59-03:00”, “2017-10-01T23:57:59-03:00”) will gives us “days”: 365
  • age : payload distinctBy $ will gives us:
{
    "firstName" : "Murali",
    "lastName" : "Krishna",
    "age" : "26"
}


  • a: “Murali” endsWith “li” will gives us “a” : true
  • a: [1, 2, 3, 4, 5] filter($ > 2) will gives us “a” : [3,4,5]
  • empty: isBlank(“”) will gives us “empty” : true
  • aa: [“a”,”b”,”c”] joinBy “-” will gives us “a” : “a-b-c”
  • a: min([1, 1000]) will gives us “a” : 1
  • a: max([1, 1000]) will gives us “a” : 1000

2. Arrays (dw::core::Arrays)

Arrays-related functions in DataWeave are:

  • countBy, divideBy, every, some, sumBy
  • [1, 2, 3] countBy (($ mod 2) == 0) will gives us 1
  • [1,2,3,4,5] dw::core::Arrays::divideBy 2 will gives us:
[
  [
    1,
    2
  ],
  [
    3,
    4
  ],
  [
    5
  ]
]
  • [1,2,3,4] dw::core::Arrays::every ($ == 1) will gives us “false”
  • [1,2,3,4] dw::core::Arrays::some ($ == 1) will gives us “true”
  • [ { a: 1 }, { a: 2 }, { a: 3 } ] sumBy $.a will gives us “6”

3. Binaries (dw::core::Binaries)

Binary functions in DataWeave-2 are:

  • fromBase64, fromHex, toBase64, toHex
  • toBase64(fromBase64(12463730)) will gives us “12463730”
  • { “binary”: fromHex(‘4D756C65’)} will gives us “binary” : “Mule”
  • { “hex” : toHex(‘Mule’) } will gives us “hex” : “4D756C65”

4. Encryption (dw::Crypto)

Encryption functions in Dataweave – 2 are:

  • HMACBinary, HMACWith, MD5, SHA1, hashWith
  • { “HMAC”: Crypto::HMACBinary((“aa” as Binary), (“aa” as Binary)) } will gives us :
  • “HMAC”: “\u0007£š±]\u00adÛ\u0006‰\u0006Ôsv:ý\u000b\u0016çÜð”
  • Crypto::MD5(“asd” as Binary) will gives us “7815696ecbf1c96e6894b779456d330e”
  • Crypto::SHA1(“dsasd” as Binary) will gives us “2fa183839c954e6366c206367c9be5864e4f4a65”

5. Diff (dw::util::Diff)

It calculates the difference between two values and returns a list of differences.

DataWeave Script:

%dw 2.0
import * from dw::util::Diff
output application/json
var a = { age: "Test" }
var b = { age: "Test2" }
---
 a diff b

Output:

{
  "matches": false,
  "diffs": [
    {
      "expected": "\"Test\"",
      "actual": "\"Test2\"",
      "path": "(root).age"
    }
 ]
}

Note:

This post was originally published on: DZone.

The rest of the functions can be found in the Mule 4 DataWeave Functions: Part 2 blog. If you are still having trouble with the Mule 4 DataWeave functions, our MuleSoft service experts are here to help you. Contact us today!

Share This