DataWeave Examples

DataWeave 2.2 is compatible and bundled with Mule 4.2. Standard Support for Mule 4.2 ended on May 2, 2021, and this version of Mule will reach its End of Life on May 2, 2023, when Extended Support ends.

Deployments of new applications to CloudHub that use this version of Mule are no longer allowed. Only in-place updates to applications are permitted.

MuleSoft recommends that you upgrade to the latest version of Mule 4 that is in Standard Support so that your applications run with the latest fixes and security enhancements.

The examples demonstrate common data extraction and transformation approaches. Before you begin, note that DataWeave version 2 (%dw 2.0) is for Mule 4 apps. For a Mule 3 app, refer to DataWeave 1.0 (%dw 1.0) examples, within the Mule 3.9 documentation set. For other Mule versions, you can use the Mule Runtime version selector in the table of contents.

Example Description

Extract Data

Shows common selector expressions for extracting values from a data source, such as a Mule message.

Set a Default Value

Shows some common ways to set default values.

Transform XML to JSON

Uses selectors to perform a basic format transformation. It does not use any functions.

Mapping Data

Uses map to reorganize fields in a JSON array. It uses as to coerce a String into a Number.

Map and Flatten an Array

Uses flatMap to map objects in an array and flatten the resulting array.

Map Objects

Uses mapObject to go through the keys and values in each object, and set all the keys to upper case.

Map Object Elements as an Array

Uses the multi-value selector to pick out the keys in an object that are named "book", these are returned as an array. It then uses map to iterate through the array this creates.

Look Up Data in an Excel (XLSX) File

Uses filter to return rows that contain a specified value.

Rename Keys

Renames some keys in a JSON object while retaining the names of all other keys in the output. Uses mapObject, if, as, and and.

Output a Field When Present

Uses if with map to determine whether to include a field in the output. You might use it to exclude fields that contain sensitive data.

Format According to Type

Uses mapObject to apply changes to the keys in an object, depending on the type of their corresponding values. Uses camelize, capitalize, and pluralize depending on the if and else if statement.

Regroup Fields

Uses groupBy, mapObject, and map to reorganize JSON and XML fields.

Zip Arrays Together

Uses zip to rearrange pairs of similar arrays so that they form a series of touples with the matching values from each.

Pick Top Elements

Uses groupBy and map to sort a list of candidates according to their score at a test, then it splits the array to select only the top candidates.

Change the Value of a Field

Masks sensitive data by changing values of some keys to asterisks (****`). Uses mapObject, if, and else.

Exclude Fields from the Output

Shows how to exclude unwanted elements from the output. Uses the - (remove) and mapObject functions.

Use Constant Directives

Defines a series of constant strings and numbers in the header, these are used to filter input and to concatenate into URLs. Uses map, if and ++ to concatenate strings.

Define a Custom Addition Function

Defines a function that obtains totals and subtotals through the accumulator function. Also performs additions, subtractions, and multiplications of numeric values.

Flatten Elements of Arrays

Uses flatten, the object constructor braces ({}), and selectors to flatten subarrays and nested elements in arrays. Uses concatenation (++) to combine arrays before flattening them and uses the ..* descendants selector on a key to select values from a flattened list.

Define a Function That Flattens Data in a List

Uses reduce, map, if, and splitBy to modify and conditionally output fields from a list.

Output Self-closing XML Tags

Uses inlineCloseOn="empty" to close empty tags (for example, <element2/>).

Insert an Attribute into an XML Tag

Uses the @(key:value) syntax to create an XML attribute.

Remove Specified XML Attributes

Defines a function that recursively checks an element and all of its children for a specific XML attribute and removes it with -. It also uses mapObject, if and is (to match types).

Include XML Namespaces

Defines multiple XML namespaces and references these in each tag.

Reference Multiple Inputs

References data on the payload, a message attribute and a variable. It then processes these through map, filter and multiplications.

Merge Fields from Separate Objects

Reference data that arrives in multiple separate payloads from one single Mule event. Filters the output based on a unique identifier. Uses map, using, as, and filter functions.

Use Constant Directives

Defines a var in the DataWeave header that builds URLs from constant directives using ++ to concatenate strings.

Parse Dates

Defines a function that normalizes conflicting date formats into a single, common format. Uses mapObject, replace and as to coerce a data type.

Add and Subtract Dates

Performs multiple math operations combining different types related to date and time.

Conditionally Reduce a List through a Function

Defines a function that reduces a list of elements into one field. It then calls this function only when a certain field has values. Uses map, reduce, splitBy, if and ++ to append to an array.

Dynamic Map Based On a Definition

Transforms the payload according to definitions sent in a variable. It defines a function that applies the logic defined in the variable, using map and default.

Pass Functions as Arguments

Defines a function that expects to receive two inputs: a function to apply and an element to apply it on. The function is also recursively applied to the element’s children. It uses mapObject lower is if/else.

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub
Submit your feedback!
Share your thoughts to help us build the best documentation experience for you!
Take our latest survey!