オブジェクトのマップ

以下の DataWeave の例では、​mapObject​ 関数を使用してオブジェクトのキーと値を反復処理します。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​DataWeave バージョン 1.2 の例​を参照してください。 他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

最初の例

この例では、​map​ と ​mapObject​ の両方の関数を使用して、入力を反復処理し、すべてのキーを大文字に設定します。

この例では、次の DataWeave 関数を使用します。

  • 「books」配列の要素を調べる ​map​。

  • 配列の各オブジェクトのキーと値を調べる ​mapObject​。

  • 各キーを大文字に設定する ​upper​。

DataWeave スクリプト:
%dw 2.0
output application/json
---
items: payload.books map (item, index) -> {
      book: item mapObject (value, key) -> {
      (upper(key)): value
      }
}
入力 JSON ペイロード:
{
    "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"
      }
    ]
}
出力 JSON:
{
  "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"
      }
    }
  ]
}

2 番目の例

この例では、​mapObject​ 関数を使用して、ペイロードで ​groupBy​ を使用した結果であるオブジェクトのキーと値を反復処理します。入力ペイロードに ​FirstName​、​LastName​、および ​Age​ キーの値が同じオブジェクトがある場合、DataWeave スクリプトでそれらのオブジェクトが CSV ファイルの 1 行に変換されます。それらのオブジェクトの残りの ​Team Name​ および ​Role​ キーの値は、CSV の 1 行上では ​:​ で連結されます。

入力 JSON ペイロード:
[
{
"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​ は名と姓は同じですが、年齢が違うため、別の人物です。

DataWeave スクリプト:
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 行上では ​:​ で連結されます。

出力 CSV:
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