# Mule 4 DataWeave Functions: Part 1

### Let's take a look at this tutorial, which gives an explanation on how to import modules by adding the import directive to the head of the DataWeave script.

Join the DZone community and get the full member experience.

Join For FreeIn DataWeave 2.0, functions are categorized into different modules:

- Core (dw::Core)
- Arrays (dw::core::Arrays)
- Binaries (dw::core::Binaries)
- Encryption (dw::Crypto)
- Diff (dw::util::Diff)
- Objects (dw::core::Objects)
- Runtime (dw::Runtime)
- Strings (dw::core::Strings)
- System (dw::System)
- URL (dw::core::URL)

Functions defined in 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 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” : 20average :

**avg**([1, 1000]) will gives us “average” : 500.5value :

**ceil**(1.5) will gives us “value” : 2result : payload

**contains**“Krish” will gives us “result” : truedays:

**daysBetween**("2016-10-01T23:57:59-03:00", "2017-10-01T23:57:59-03:00") will gives us "days": 365age : payload

**distinctBy**$ will gives us:

```
{
"firstName" : "Murali",
"lastName" : "Krishna",
“age” : ”26”
}
```

a: "Murali"

**endsWith**"li" will gives us “a” : truea: [1, 2, 3, 4, 5]

**filter**($ > 2) will gives us “a” : [3,4,5]empty:

**isBlank**("") will gives us “empty” : trueaa: ["a","b","c"]

**joinBy**"-" will gives us “a” : “a-b-c”a:

**min**([1, 1000]) will gives us “a” : 1a:

**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:

f

**romBase64, 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 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:**

We will proceed with the rest of the functions in the Mule 4 DataWeave Functions: Part 2 article.

Opinions expressed by DZone contributors are their own.

Comments