The Map Operator
This blog explains about Map operator in Dataweave , how to use the
map
operator. The as
operator
is also featured in this example. Take an JSON list of books and use DataWeave
to output a JSON version of the Item list. It goes through each JSON book
element
from the JSON Array input, simply using the map
operator. And transforms to JSON item
Array
Consider the following Input:
{
"books": [
{
"-category": "cooking",
"title": {
"-lang": "en",
"#text": "Everyday
Italian"
},
"author": "Giada
De Laurentiis",
"year": "2005",
"price": "30.00"
},
{
"-category": "children",
"title": {
"-lang": "en",
"#text": "Harry
Potter"
},
"author": "J K.
Rowling",
"year": "2005",
"price": "29.99"
},
{
"-category": "web",
"title": {
"-lang": "en",
"#text": "XQuery
Kick Start"
},
"author": [
"James McGovern",
"Per Bothner",
"Kurt Cagle",
"James Linn",
"Vaidyanathan
Nagarajan"
],
"year": "2003",
"price": "49.99"
},
{
"-category": "web",
"-cover": "paperback",
"title": {
"-lang": "en",
"#text": "Learning
XML"
},
"author": "Erik
T. Ray",
"year": "2003",
"price": "39.95"
}
]
}
The Dataweave transformation logic as below
%dw 1.0
%output application/json
---
items: payload.books map {
type: "book",
price: $.price as :number,
properties: {
title: $.title,
author: $.author,
year: $.year as :number
}
}
The output as follows
{
"items": [
{
"type": "book",
"price": 30.00,
"properties": {
"title": {
"-lang": "en",
"#text": "Everyday
Italian"
},
"author": "Giada
De Laurentiis",
"year": 2005
}
},
{
"type": "book",
"price": 29.99,
"properties": {
"title": {
"-lang": "en",
"#text": "Harry
Potter"
},
"author": "J K.
Rowling",
"year": 2005
}
},
{
"type": "book",
"price": 49.99,
"properties": {
"title": {
"-lang": "en",
"#text": "XQuery
Kick Start"
},
"author": [
"James McGovern",
"Per Bothner",
"Kurt Cagle",
"James Linn",
"Vaidyanathan
Nagarajan"
],
"year": 2003
}
},
{
"type": "book",
"price": 39.95,
"properties": {
"title": {
"-lang": "en",
"#text": "Learning
XML"
},
"author": "Erik
T. Ray",
"year": 2003
}
}
]
}
The flow.xml as follows
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd">
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8082" basePath="dw" doc:name="HTTP Listener Configuration"/>
<flow name="books_to_itemsFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
items: payload.books map {
type: "book",
price: $.price as :number,
properties: {
title: $.title,
author: $.author,
year: $.year as :number
}
}]]></dw:set-payload>
</dw:transform-message>
</flow>
</mule>
No comments:
Post a Comment