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

この 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"
  }
]

Was this article helpful?

💙 Thanks for your feedback!