リスト内のデータをフラット化する関数の定義

ネストされたデータ構造の場合、そのデータを削減 (「フラット化」) し、よりシンプルな出力を生成する必要が生じることがあります。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​『DataWeave バージョン 1.2 の例』​を参照してください。 他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

この DataWeave の例では、ヘッダーで定義された関数を使用して ​interests​ および ​contenttypes​ 配列のデータをフラット化し、空でない場合にのみ ​contenttypes​ を出力します。

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

  • 入力のセット要素を調べる ​map​。

  • 配列をフラット化する ​reduce​。

  • 項目を条件付きで表示する ​if​。

  • 入力を解析する ​splitBy​。

DataWeave スクリプト:
%dw 2.0
output application/json
fun reduceMapFor(data) = data reduce (($$ splitBy ":")[0] ++ "," ++ ($ splitBy ":")[0])
---
payload.results map() ->
{
  email: $.profile.email,
  name: $.profile.firstName,
  tags: reduceMapFor($.data.interests.tags[0]),
        (contenttypes: reduceMapFor($.data.interests.contenttypes[0])) if(sizeOf($.data.interests.contenttypes[0]) > 0)
}
dataweave
入力 JSON ペイロード:
出力
[
  {
    "email": "johndoe@demo.com",
    "name": "john",
    "tags": "digital-strategy,innovation"
  },
  {
    "email": "janedoe@demo.com",
    "name": "jane",
    "tags": "tax-reform,retail-health",
    "contenttypes": "News,Analysis,Case studies,Press releases"
  }
]
json