Dataweave Interview Questions
Dataweave Interview Questions
>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
<flow name="dataweave-of-the-dayFlow27" doc:id="2c066864-9d64-4e8c-bf05-
ca011c6a5921" >
<ee:transform doc:name="reverse array" doc:id="2db0f163-0a35-4920-
98f7-d7c4a7c545ef">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
var myArray = 1 to 5
// myArray[-1 to -5]
// myArray[-1 to -sizeOf(myArray)]
//myArray[-1 to 0]
//flatten(myInput)[-1 to 0]
flatten(myInput) reduce(element, accumulator = []) -> [element] ++
accumulator]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow30" doc:id="6b833f81-5976-4d5b-bac9-
ad5025efd0b8">
<ee:transform doc:name="get unique names" doc:id="5482a4d4-1684-
4c66-9a1a-805ef7d4866a">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
// get unique names
var myInput = [[
{"name":"john"},
{"name":"leonardo"}
],
[
{"name": "leonardo"},
{"name": "alicia"},
{"name": "jennifer"},
{"name": "john"}]
]
---
(myInput..name) distinctBy $]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow29" doc:id="c2b45a0d-2e46-4c9e-800d-
866b29ab36df" >
<ee:transform doc:name="Country City" doc:id="a764e027-934d-4694-
8a4a-c25d9deba8f2" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var myInput = [
{
"Country": "USA",
"Capital": "DC"
},
"Country": "France",
"Capital": "France"
}
]
// Expected output
/*
{
"USA": "DC",
"France": "France"
}
*/
---
//myInput reduce (obj, accu = {}) -> accu ++ {(valuesOf(obj)[0]): valuesOf(obj)
[1]}
var myData = [
{firstName:'Fisseha',lastName:'Hagos'},
{firstName:'Solomon',lastName:'Mulu'},
{firstName:'Helen',lastName:'Tesfay'}
]
---
//zip(myData.lastName, myData.firstName)
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow3" doc:id="5dd7d148-33f9-472f-8041-
6015d0f5ca3f" >
<ee:transform doc:name="file name from date and time"
doc:id="8e2a8c80-89aa-4c85-bdec-ce20302acd9a" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
now()[0 to 18] replace '-' with '_' replace 'T' with '_' replace ':' with
'_']]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow4" doc:id="2e7e9eb3-4d23-49d5-b8a9-
d39efcbae802">
<ee:transform doc:name="TDF age" doc:id="8d6e49d2-e4d3-4533-8dc9-
5f26a2e0b325">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
daysBetween(|2020-11-04|, now())
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow10" doc:id="83316da4-6bf4-4663-b665-
27197d2721d8" >
<ee:transform doc:name="placeholder" doc:id="0c55e415-010a-4a00-
94d8-3ad9a020b7be" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var carModel1 = 'Toyota'
var carModel2 = 'Honda'
---
'The provided car model is $(carModel1)']]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow11" doc:id="f47546b9-ef3e-4378-bb38-
bc7f38f2dc2a">
<ee:transform doc:name="Change from one time zone to another"
doc:id="4a19af2f-776b-4e69-af4f-998b83915764">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
'EST': now(),
'UTC': now() >> "UTC",
'CET': now() >> "CET",
'EST': |2022-11-10T12:10:10-04:00|,
'EST2Pacific': |2022-11-10T12:10:10-04:00| >> "-08",
'EST2Pacific': |2022-11-10T12:10:10-04:00| >> "America/Los_Angeles"
}
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow5" doc:id="8dd578bf-6011-473f-8d98-
1b6eae3a9cde" >
<ee:transform doc:name="period operations" doc:id="726db7b0-3944-
492c-a7ca-9acac8ea79af" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
'now': now(),
'yesterday': now() -|P1D|,
'tomorrow': now() + |P1D|,
'last month': |P1M| - now(),
'next month': |P1M| + now(),
'last year': now() - |P1Y|,
'next year': now() + |P1Y|,
'last minute': now() - |PT1M|,
'after 10 minutes': now() + |PT10M|,
'after 10 seconds': now() + |PT10S|,
'Before 10 minutes': now() - |PT10M|,
'Before 10 seconds': now() - |PT10S|,
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow7" doc:id="d67a1dcc-f3af-413c-8bec-
7526a7e81d72" >
<ee:transform doc:name="period operations with replacement"
doc:id="448ee091-c67d-41a4-8228-d2a2e9f5fd5d" >
<ee:message >
<ee:set-payload ><![CDATA[output application/json
var days_before = 5
var months_before = 4
var years_before = 2
var minutes_after = 10
var seconds_after = 5
---
{
'now': now(),
'days_before': now() -'P$(days_before)D',
'months_before': now()-'P$(months_before)M',
'years_before': now() - 'P$(years_before)Y',
'minutes_after': now() + 'PT$(minutes_after)M',
'seconds_after': now() + 'PT$(seconds_after)S'
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow8" doc:id="a73bd71d-3469-4dd8-9f7a-
6ddbb44ba425" >
<ee:transform doc:name="++ and + with arrays and objects"
doc:id="fa3cc554-15db-4a46-85e1-e3b046e76179" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
// array1 ++ array2
// array1 + object1
// object1 ++ array1
// array1 ++ object1
// object1 + object1
object1 ++ object2
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow6" doc:id="2bfdbc96-dafd-469f-bf48-
2192a5a8d598" >
<ee:transform doc:name="-- and - with arrays and objects"
doc:id="aa9372c5-3b4c-4970-8b30-03743ba0da57" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
// array1 -3
// array1 - [3]
// array1 -[3,5]
// payload[0]
// keysOf(payload[0])
// valuesOf(payload[0])
//zip(keysOf(payload[0]),valuesOf(payload[0]))
unzip(lat_lon)]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
/* Reverse the order of the key value pairs in the object below.
birth_year: 1995 should be first and name: 'John' should be last
*/
/*
print the output of the variables below step by step and understand what it is
doing.
*/
---
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow13" doc:id="15471011-88ea-4ccb-89ca-
d4027e430581" >
<ee:transform doc:name="reduce" doc:id="d49f0338-ccac-4bc2-bbbb-
676604367c7f" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
/*
Use reduce to transform the input array into the object below. Keep in mind
that the concatenation
* function ++ seen before for Strings also works between Objects as seen in the
starting example,
* where you can also see how dynamic keys are defined in an Object.
*/
var myData = [
{"id": "1", "name": "dev"},
{"id": "2", "name": "test"},
{"id": "3", "name": "uat"},
{"id": "4", "name": "prod"}
]
---
myData reduce (element, accu = {}) -> accu ++ {(element.name):
element.id}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow14" doc:id="53911b26-b98e-4347-94ef-
0f3b4aeb8e14" >
<ee:transform doc:name="map filter and get dayOfWeek"
doc:id="0ff210e5-333e-4bb3-8f26-a8d17a99f43d" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var myData = [
{
"datetime": "2020-01-01T08:00:00",
"event": "Breakfast @ Cafe",
"organizer": "Phoebe"
},
{
"datetime": "2020-01-02T18:00:00",
"event": "Study for cert exam",
"organizer": "Ross"
},
{
"datetime": "2020-01-04T16:00:00",
"event": "Drinks w/ friends",
"organizer": "Monica"
},
{
"datetime": "2020-01-08T08:00:00",
"event": "Develop mule application",
"organizer": "Ross"
},
{
"datetime": "2020-01-05T08:00:00",
"event": "Football game",
"organizer": "Joey"
}
]
var myOutput = [
{
"datetime": "2020-01-02T18:00:00",
"event": "Study for cert exam",
"organizer": "Ross",
"day_of_week": 4
},
{
"datetime": "2020-01-08T08:00:00",
"event": "Develop mule application",
"organizer": "Ross",
"day_of_week": 3
}
]
---
(myData filter $.organizer=='Ross') map (item , index) -
>{ datetime: item.datetime,
event: item.event,
organizer: item.organizer,
day_of_week: (item.datetime as LocalDateTime).dayOfWeek
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow16" doc:id="d9fe07aa-0a98-43e2-aa1d-
cb96353ea972" >
<ee:transform doc:name="filter multiple" doc:id="3bae9ec8-9451-41c2-
9859-9b2e345239b3" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var myInput = [
"starting",
"waiting",
"deleted",
"processing",
"processed"
]
---
myInput filter not (($ =='deleted') or ($ =='processed'))]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow17" doc:id="648ed77f-2791-4978-8ea0-
c396c36f7522" >
<ee:transform doc:name="exercise 8.2" doc:id="dad90f6e-d0a2-4905-
9c57-b53183a775d3" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
/*
Let's combine what we just learned with what we have also learned about arrays
to
* transform all objects in the following array, so their keys are lower case
and
* their values are upper case.
*/
var myInput = [
{"First Name": "Max", "Last Name": "The Mule"},
{"First Name": "Albert", "Last Name": "Einstein"}
]
---
myInput map (item, index1) -> item mapObject (value, key, index2) ->
{ (lower(key)): upper(value)}
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow15" doc:id="4675491b-0bbd-44cf-8655-
f9fc72884446" >
<ee:transform doc:name="double map" doc:id="461bedb9-436b-40c2-8244-
f1cc7fc38599" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var myInput = [
{
"name": "Archer",
"jobs": [
{ "type": "developer" },
{ "type": "investor" },
{ "type": "educator" }
]
},
{
"name": "Cyril",
"jobs": [
{ "type": "developer" },
{ "type": "entrepreneur" },
{ "type": "lion tamer" }
]
}
]
/*
var required_output = [
{
"num": 1
"name": "Archer",
"jobs": [
{ "num": 1, "type": "developer" },
{ "num": 2, "type": "investor" },
{ "num": 3, "type": "educator" }
]
},
{
"num": 2
"name": "Cyril",
"jobs": [
{ "num": 1, "type": "developer" },
{ "num": 2, "type": "entrepreneur" },
{ "num": 3, "type": "lion tamer" }
]
}
]
*/
---
myInput map (value, index) ->
{ num: index + 1,
name: value.name,
jobs: value.jobs.`type` map (value2, index2) -
>{ num: index2 + 1,
`type`: value2
}
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow18" doc:id="f111333d-6323-4f42-8124-
b3bfcc66a0ce" >
<ee:transform doc:name="text to object" doc:id="b290057d-3228-4015-
a1e9-1aeff16d0cc3" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var myData = [{
"name" : "Putnam County Airport",
"lat" : 39.6335556,
"lon" : null,
"alt" : 842,
"tz" : -5,
"tzone" : null
},
{
"name" : "Dell Flight Strip",
"lat" : 44.7357483,
"lon" : -112.7200133,
"alt" : null,
"tz" : -7,
"tzone" : "America/Denver"
}]
---
var cities = [
city1: { elevation: '10,361 ft',
average_yearly_temperature: '32 °F',
},
city2: {
elevation: '10,312 ft',
average_yearly_temperature: '212 °F',
},
city3:
{ elevation: '10,151 ft',
average_yearly_temperature: '-40 °F',
},
fun cleanFeet(feet) = trim(feet replace 'ft' with '' replace ',' with '') as
Number
fun cleandeegresF(degreesF) = trim(degreesF replace '°F' with '')
var Maxx = myArray reduce (element, accu) -> if(element > accu) element else
accu
var Minn = myArray reduce (element, accu) -> if(element > accu) accu else
element
---
var givenNumber = 347 // change this value to test for various numbers
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow24" doc:id="06a92700-cbee-4c20-952f-
e984a5d8ba3c" >
<ee:transform doc:name="xml to array" doc:id="29c0cb32-c39d-472d-
9c38-610d3b283170" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var expectedOutPut = [
{
"id": "501",
"to": "Tove",
"from": "Jani",
"heading": "Reminder",
"body": "Don't forget me this weekend!"
},
{
"id": "502",
"to": "Jani",
"from": "Tove",
"heading": "Re: Reminder",
"body": "I will not"
}
]
---
ages:{(
ages map (value, index) ->
{ age:{service_year: value}
}
)}
/*
var myInput = [
{
"name" : "Lansdowne Airport",
"lat" : 41.1304722,
"lon" : -80.6195833,
"alt" : 1044,
"tz" : -5,
"tzone" : "America/New_York"
},
{
"name" : "Moton Field Municipal Airport",
"lat" : 32.4605722,
"lon" : -85.6800278,
"alt" : 264,
"tz" : -6,
"tzone" : "America/Chicago"
}
]
---
employees:
employee @(firtName:myInput[0].employee1.firstName,
lastName:myInput[0].employee1.lastName
):null]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-of-the-dayFlow31" doc:id="a4c9cbd0-43fc-440e-9826-
101fa4eb14d1" >
<ee:transform doc:name="Transform Message" doc:id="46cde207-793d-
4a92-befe-1ec7ecd2a136" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
//sizeOf(payload filter $.tz == -5)
---
{
name: myInput.name,
streetName: (myInput.AddressLine1 splitBy(" "))[1 to -1] reduce(a, b) -> b
++ " " ++ a,
houseNumber: (myInput.AddressLine1 splitBy(" "))[0],
apartmentNumber: splitBy(myInput.AddressLine2, " ")[1],
zipcode: myInput.zip
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-interview-questionsFlow1" doc:id="9da435de-ed74-
4554-a1f7-cb23568fa7e8" >
<ee:transform doc:name="shopping list" doc:id="079fc43e-4010-487c-
b8cc-d0e5a0649f84" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var mulusoftGrus = {
manager: 'Roman',
groupLions: {
name: 'Feven',
name: 'Letay',
groupTigers: {
name: 'Helen',
name: 'Rahel',
groupAcers:{
name: 'Lily',
name: 'Hope'
}
}
}
}
---
{
"first_id_from_each_level": myInput..id,
"all_ids_from_first_level":myInput.*id,
"all_ids_from_second_level": myInput.secondLevel.*id,
"all_ids_from_third_level": myInput.secondLevel.thirdLevel.*id ,
"all_ids": myInput..*id
}
]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-interview-questionsFlow2" doc:id="9f2be92c-6f18-
4715-a01d-f82fa59015ed" >
<ee:transform doc:name="check if a numbe is composite number"
doc:id="e3ae05e8-0a68-48c8-998c-1f62ae870692" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
fun checkIfComposite(givenNumber) = do {
var arrayOfNumbers = 2 to givenNumber - 1
var remainders = arrayOfNumbers map (value, index) ->
mod(givenNumber, value)
---
if (!isInteger(givenNumber) or (givenNumber < 3)) 'Incorrect Input'
checkIfComposite(51)]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-interview-questionsFlow3" doc:id="ca133ac2-04e9-
4575-a95c-2f217d7f5792" >
<ee:transform doc:name="two arrays: common and not common"
doc:id="854b3ecd-47f1-41d0-8b35-0868667c6cbf" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
// Given two arrays below, find (a): common values,
// (b) values only in either of them
var myInput = [
{id: 1,
name: 'John',
lastName: 'Mark',
state: 'MD',
city: 'Columbia'
},
{id: 2,
name: 'Luke',
lastName: 'Mark',
state: 'MD',
city: 'Baltimore'
},
{id: 3,
name: 'Mathew',
lastName: 'Mark',
state: 'VA',
city: 'Alexandria'
}
]
---
---
myAnswer]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-interview-questionsFlow6" doc:id="46a07c20-d38a-
4ee7-953c-ca3cc6996ec9" >
<ee:transform doc:name="filterObject" doc:id="5c67b9c0-086a-4d3f-
8140-c6d919cc328e" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
// return only the keys:value pairs where the value is a string.
var myObj = {
"key1":"hello world!",
"key2": "fish is healthy food",
"key3": 45,
"key4": true
}
---
myObj filterObject ((value, key, index) ->
typeOf(value) == String
)]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-interview-questionsFlow7" doc:id="7afe49a9-b607-
462d-b171-3c02bf299675" >
<ee:transform doc:name="Transform Message" doc:id="92e08311-28ad-
49fd-a29a-45346afaa0e5" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
var myKids = [
{
name: 'noah',
favorites: [
{food: "pizza"},
{fruit:"apple"}
]
},
{
name:'jacob',
favorites: [
{food: "pizza"},
{fruit:"banana"}
]}]
---
myKids map ((item, index) -> {nameID: index + 100,
name: item.name,
favorites: item.favorites map ((item2, index2) ->
{favoriteID: index2 + 200,
(item2)
}
)
})]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="dataweave-interview-questionsFlow8" doc:id="bc74f7c2-aa43-
4d47-bec4-4eab98e7efd4" >
<ee:transform doc:name="create an array of dates" doc:id="c371ba9f-
6bc2-42f1-a1b7-c63fdb6bd7d7" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json