DataWeave の例

DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポート​が終了しました。

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

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

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

説明

データの抽出

Mule メッセージなどのデータソースの値を抽出する一般的なセレクター式を示します。

デフォルト値の設定

デフォルト値を設定する一般的な方法を示します。

XML から JSON への変換

セレクターを使用して、基本的な形式変換を実行します。関数は使用しません。

データのマッピング

map​ を使用して、JSON 配列の項目を再編成します。​as​ を使用して、String (文字列) を Number (数値) に強制変換します。

配列のマップとフラット化

flatMap​ を使用して配列内のオブジェクトをマップし、結果の配列をフラット化します。

オブジェクトのマップ

mapObject​ を使用して、各オブジェクトのキーと値を調べ、すべてのキーを大文字に設定します。

オブジェクト要素の配列としてのマップ

複数値セレクターを使用して、オブジェクトの「book」という名前のキーを選択し、配列として返します。次に、​map​ を使用して、これによって作成される配列を反復処理します。

Excel (XLSX) ファイルのデータの参照

filter​ を使用して、特定の値を含む行を返します。

キーの名前の変更

JSON オブジェクトの一部のキーの名前を変更し、出力の他のキーの名前はすべてそのままにします。​mapObject​、​if​、​as​、​and​ を使用します。

存在する項目の出力

map​ で ​if​ を使用して、出力に項目を含めるかどうかを決定します。これを使用して、機密データが含まれる項目を除外することもできます。

型に応じた形式

mapObject​ を使用して、対応する値の型に応じてオブジェクトのキーに変更を適用します。​if​ および ​else if​ ステートメントに応じて、​camelize​、​capitalize​、​pluralize​ を使用します。

項目の再グループ化

groupBy​、​mapObject​、​map​ を使用して、JSON および XML 項目を再編成します。

複数の配列要素のグループ化

それぞれの一致する値で一連のタプルが形成されるように、​zip​ を使用して類似する配列のペアを再編成します。

上位要素の取得

groupBy​ および ​map​ を使用して、テストのスコアに応じて一連の候補を並び替え、上位の候補のみを選択できるように配列を分割します。

項目の値の変更

一部のキーの値をアスタリスク (​****`​) に変更して、機密データをマスクします。​mapObject​、​if​、​else​ を使用します。

出力からの項目の除外

不要な要素を出力から除外する方法を示します。​-​ (削除) および ​mapObject​ 関数を使用します。

定数ディレクティブの使用

ヘッダーで一連の定数文字列および数値を定義し、これらを使用して入力を絞り込んだり、URL に連結したりします。​map​、​if​、​++​ を使用して、文字列を連結します。

カスタム追加関数の定義

accumulator​ 関数を使用して合計および小計を取得する関数を定義します。また、数値の加算、減算、乗算も実行します。

フラット化された配列要素

flatten​、オブジェクトコンストラクター括弧 (​{}​)、およびセレクターを使用して、サブ配列と配列内でネストされている要素をフラット化します。 連結演算子 (​++​) を使用して、フラット化する前に配列を組み合わせます。また、​..*​ 子孫セレクターをキーに対して使用して、フラット化されたリストから値を選択します。

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

reduce​、​map​、​if​、​splitBy​ を使用して、リストの項目を変更し、条件付きで出力します。

自己終了 XML タグの出力

inlineCloseOn="empty"​ を使用して、空のタグを閉じます (例: <element2/>​)。

XML タグへの属性の挿入

@(key:value)​ 構文を使用して、XML 属性を作成します。

指定した XML 属性の削除

特定の XML 属性の要素とそのすべての子を再帰的にチェックし、​-​ を使用して削除する関数を定義します。また、(型を照合するために) ​mapObject​、​if​、​is​ も使用します。

XML 名前空間を含める

複数の XML 名前空間を定義し、各タグでそれらを参照します。

複数の入力の参照

ペイロード、メッセージ属性、変数のデータを参照します。次に、​map​、​filter​、乗算を使用してこれらを処理します。

個別のオブジェクトの項目のマージ

1 つの Mule イベントから複数の個別のペイロードに到達するデータを参照します。一意の識別子に基づいて出力を絞り込みます。​map​、​using​、​as​、​filter​ 関数を使用します。

定数ディレクティブの使用

DataWeave ヘッダーで定数ディレクティブから URL をビルドする ​var​ を定義します (文字列の連結には ​++​ を使用)。

日付の解析

競合する日付形式を 1 つの共通形式に正規化する関数を定義します。​mapObject​、​replace​、​as​ を使用して、データ型を強制変換します。

日付の加算と減算

日時に関連するさまざまな型を組み合わせて複数の算術演算を実行します。

関数を使用したリストの条件付き削減

一連の要素を 1 つの項目に削減する関数を定義します。その後、特定の項目に値がある場合にのみこの関数をコールします。​map​、​reduce​、​splitBy​、​if​、​++​ を使用して、配列に追加します。

定義に基づいた動的なマップ

変数で設定された定義に応じてペイロードを変換します。​map​ および ​default​ を使用して、変数で定義されたロジックを適用する関数を定義します。

関数を引数として渡す

2 つの入力 (適用する関数と関数を適用する要素) を受け入れる関数を定義します。この関数は、要素の子にも再帰的に適用されます。​mapObject​、​lower​、​is​、​if/else​ を使用します。