オブジェクトのマップ

以下の 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
      }
}
dataweave
入力 JSON ペイロード:
出力 JSON:

2 番目の例

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

入力 JSON ペイロード:

上記の入力の例では、​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

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
CSV