オブジェクトキーのマップ

この DataWeave 例では、​mapObject​ 関数を使用してオブジェクトの配列を反復処理し、指定された条件の値と一致する新しいオブジェクトを追加します。

開始する前に、DataWeave バージョン 2 (​%dw 2.0​) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (​%dw 1.0​) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。

入力はシートが含まれる JSON オブジェクトで構成されています。すべてのシートの値 (たとえば、​(sheet)1​、​(sheet)2​) はオブジェクトの配列です。DataWeave スクリプトでは、シート番号が ​append​ オブジェクトの ​Id​ キーの値に等しい場合、別のオブジェクト ​append​ を最後の項目として一致するシート配列に追加します。 例では、​fun extractNumber​ 関数を使用してシートページ名 ​pageName​ からシート番号を抽出します。 続いて、DataWeave 関数の ​mapObject​ はルートのすべてのシートで反復され、​extractNumber​ が ​append.Id​ 値に一致する場合、この関数によって ​append​ オブジェクトが一致するシートオブジェクトに追加されます。

DataWeave スクリプト:
%dw 2.0
output application/json

var append =
    {
    "Id": "2",
    "Access": "4444",
    "Subteam": "1",
    }

fun extractNumber(pageName: Key) =
     (pageName as String match  /\(sheet\)([0-9]+)/)[1]
---
payload mapObject ((value, key, index) -> do {
        if(extractNumber(key) == append.Id)
            {(key): value << append}
         else
            {(key): value}
})
入力 JSON ペイロード:
{
"(sheet)1": [
{
  "Id": 1.0,
  "Team": "Mule",
  "timestamp": "2019-09-26T16:37:54",
  "Access": 12431
}
],
"(sheet)2": [
{
  "Id": 2.0,
  "Team": "Max",
  "timestamp": "2019-09-26T16:37:54",
  "Access": 81243
},
{
  "Id": 2.0,
  "Team": "Max Mule",
  "timestamp": "2019-09-26T18:00:54",
  "Access": 67676
}
]
}
出力 JSON:
{
  "(sheet)1": [
    {
      "Id": 1.0,
      "Team": "Mule",
      "timestamp": "2019-09-26T16:37:54",
      "Access": 12431
    }
  ],
  "(sheet)2": [
    {
      "Id": 2.0,
      "Team": "Max",
      "timestamp": "2019-09-26T16:37:54",
      "Access": 81243
    },
    {
      "Id": 2.0,
      "Team": "Max Mule",
      "timestamp": "2019-09-26T18:00:54",
      "Access": 67676
    },
    {
      "Id": "2",
      "Access": "4444",
      "Subteam": "1"
    }
  ]
}