Flex Gateway新着情報
Governance新着情報
Monitoring API Manager以下の DataWeave の例では、mapObject
関数を使用してオブジェクトのキーと値を反復処理します。
開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 の例を参照してください。
他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
この例では、map
と mapObject
の両方の関数を使用して、入力を反復処理し、すべてのキーを大文字に設定します。
この例では、次の DataWeave 関数を使用します。
「books」配列の要素を調べる map
。
配列の各オブジェクトのキーと値を調べる mapObject
。
各キーを大文字に設定する upper
。
%dw 2.0
output application/json
---
items: payload.books map (item, index) -> {
book: item mapObject (value, key) -> {
(upper(key)): value
}
}
{
"books": [
{
"-category": "cooking",
"title":"Everyday Italian",
"author": "Giada De Laurentiis",
"year": "2005",
"price": "30.00"
},
{
"-category": "children",
"title": "Harry Potter",
"author": "J K. Rowling",
"year": "2005",
"price": "29.99"
},
{
"-category": "web",
"title": "XQuery Kick Start",
"author": [
"James McGovern",
"Per Bothner",
"Kurt Cagle",
"James Linn",
"Vaidyanathan Nagarajan"
],
"year": "2003",
"price": "49.99"
},
{
"-category": "web",
"-cover": "paperback",
"title": "Learning XML",
"author": "Erik T. Ray",
"year": "2003",
"price": "39.95"
}
]
}
{
"items": [
{
"book": {
"-CATEGORY": "cooking",
"TITLE": "Everyday Italian",
"AUTHOR": "Giada De Laurentiis",
"YEAR": "2005",
"PRICE": "30.00"
}
},
{
"book": {
"-CATEGORY": "children",
"TITLE": "Harry Potter",
"AUTHOR": "J K. Rowling",
"YEAR": "2005",
"PRICE": "29.99"
}
},
{
"book": {
"-CATEGORY": "web",
"TITLE": "XQuery Kick Start",
"AUTHOR": [
"James McGovern",
"Per Bothner",
"Kurt Cagle",
"James Linn",
"Vaidyanathan Nagarajan"
],
"YEAR": "2003",
"PRICE": "49.99"
}
},
{
"book": {
"-CATEGORY": "web",
"-COVER": "paperback",
"TITLE": "Learning XML",
"AUTHOR": "Erik T. Ray",
"YEAR": "2003",
"PRICE": "39.95"
}
}
]
}
この例では、mapObject
関数を使用して、ペイロードで groupBy
を使用した結果であるオブジェクトのキーと値を反復処理します。入力ペイロードに FirstName
、LastName
、および Age
キーの値が同じオブジェクトがある場合、DataWeave スクリプトでそれらのオブジェクトが CSV ファイルの 1 行に変換されます。それらのオブジェクトの残りの Team Name
および Role
キーの値は、CSV の 1 行上では :
で連結されます。
[
{
"Sr.No.": 1,
"FirstName": "Charles",
"LastName": "Lock",
"Age": 40,
"Team Name": "Scrum team 1",
"Role": "developer"
},
{
"Sr.No.": 2,
"FirstName": "Josh",
"LastName": "Rodriguez",
"Age": 45,
"Team Name": "architecture",
"Role": "SA"
},
{
"Sr.No.": 3,
"FirstName": "Josh",
"LastName": "Rodriguez",
"Age": 45,
"Team Name": "technology",
"Role": "advisor"
},
{
"Sr.No.": 4,
"FirstName": "Josh",
"LastName": "Rodriguez",
"Age": 35,
"Team Name": "development",
"Role": "developer"
},
{
"Sr.No.": 5,
"FirstName": "Jane",
"LastName": "Rodriguez",
"Age": 30,
"Team Name": "architecture",
"Role": "SA"
},
{
"Sr.No.": 6,
"FirstName": "Jane",
"LastName": "Rodriguez",
"Age": 30,
"Team Name": "Scrum team 1",
"Role": "developer"
},
{
"Sr.No.": 7,
"FirstName": "Josh",
"LastName": "Lee",
"Age": 42,
"Team Name": "Scrum team1",
"Role": "developer"
}
]
上記の入力の例では、Sr.No. 2
と Sr.No. 3
、Sr.No. 5
と Sr.No. 6
はそれぞれ名、姓、年齢が同じであるため、同じ人物です。一方、Sr.No. 4
は名と姓は同じですが、年齢が違うため、別の人物です。
output application/csv
---
valuesOf(
payload
groupBy ((item, index) -> (
item.FirstName ++ item.LastName ++ item.Age))
mapObject ((value, key, index) ->
(index): {
"Sr.No.": value."Sr.No." joinBy ":",
"FirstName": value.FirstName[0],
"LastName": value.LastName[0],
"Age": value.Age[0],
"Team Name": value."Team Name" joinBy ":",
"Role": value.Role joinBy ":"
})
)
DataWeave スクリプトはオブジェクトのキー FirstName
、LastName
、Age
の繰り返される値をキー-値 Sr.No. 2
と Sr.No. 3
、Sr.No. 5
と Sr.No. 6
でマージします。これらの値は CSV の 1 行上では ,
で区切られます。それらのオブジェクトの Team Name
および Role
の値は、CSV の 1 行上では :
で連結されます。
Sr.No.,FirstName,LastName,Age,Team Name,Role
1,Charles,Lock,40,Scrum team 1,developer
2:3,Josh,Rodriguez,45,architecture:technology,SA:advisor
4,Josh,Rodriguez,35,development,developer
5:6,Jane,Rodriguez,30,architecture:Scrum team 1,SA:developer
7,Josh,Lee,42,Scrum team1,developer