複数のペイロードのマージ

DataWeave 2.1 は Mule 4.1 と互換性があります。 Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にその​​すべてのサポートが終了します。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

この DataWeave の例では、コレクションのコレクションが含まれる入力に対処します。最初のペイロードインデックス ​payload[0]​ は本ごとの価格をリストし、2 番目のペイロードインデックス ​payload[1]​ は本ごとの著者をリストします。各本は一意の ​bookId​ キーで識別できます。この変換では、キーを照合して両方のペイロード配列要素を 1 つにマージします。1 つの本に複数の著者がいる場合もあります。

これは、配列で構成される 1 つのペイロードを入力として設定することとは異なります。ここでは、ペイロードは配列の配列になります。

次の関数を使用します。

  • map​。最初のペイロード要素 (​payload[0]​) の要素を調べます。2 番目の ​map​ 関数は、要素ごとに検索条件に一致する 2 番目のペイロード (​payload[1]​) の要素を調べます。

  • using​。メイン ​map​ 関数のスコープ内の短い別名を定義します。

  • filter​。2 番目の ​map​ 関数のスコープを、現在最初の ​map​ 関数で処理されているオブジェクトと同じ ​bookId​ を共有するオブジェクトに制限します。このようにして、それぞれの関連する著者のみが出力にリストされます。

DataWeave
%dw 2.0
output application/json
---

payload[0]  map (bookListing) -> using (id = bookListing.bookId) {
	bookId:	id,
    title:  bookListing.title,
	price: 	bookListing.price as Number,
	(payload[1] filter ($.*bookId contains id)  map (bookAuthor) -> {
		author:bookAuthor.author
   })
}
コレクションの入力 1 - Payload[0]
[
  { "bookId":"101",
    "title":"world history",
    "price":"19.99"
  },
  {
    "bookId":"202",
    "title":"the great outdoors",
    "price":"15.99"
  }
]
コレクションの入力 2 - Payload[1]
[
  {
    "bookId":"101",
    "author":"john doe"
  },
  {
    "bookId":"202",
    "author":"jane doe"
  }
]
出力
[
  {
    "bookId": "101",
    "title": "world history",
    "year": "2017",
    "isbn": "11111",
    "price": "19.99",
    "author": "john doe"
  },
  {
    "bookId": "202",
    "title": "the great outdoors",
    "year": "2016",
    "isbn": "22222",
    "price": "15.99",
    "author": "jane doe"
  }
]