DataWeave の例

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

説明

データの抽出

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

XML 要素の選択

単一値の DataWeave セレクター (​.​) を使用して、XML 要素からデータを抽出します。

デフォルト値の設定

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

リーダーとライターの設定プロパティの設定

application/csv​ などのデータ形式の読み取りおよび書き込みを行うための設定を使用および変更する方法を示します。

XML から JSON への変換

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

スクリプトの出力 MIME タイプの変更

特定の形式の出力の MIME タイプをカスタマイズする方法 (​application/problem+json​ MIME タイプの JSON 出力の例を含む) を示します。

データのマップ

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

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

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

オブジェクトのマップ

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

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

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

配列内のオブジェクトのマップ

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

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

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

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

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

CSV ファイルのデータの参照

filter​ と ​map​ を使用して CSV ファイルのデータを参照し、電話番号の入力配列内で検出されたコールコードごとに国コードを返します。

Base64 のデコードとエンコード

ファイルストリームを Base64 に変換し、Base64 文字列をファイルストリームに変換します。入力および出力として PDF ファイルを使用します。

DataWeave を使用した Java メソッドのコール

Mule プロジェクトの Java クラスから Java メソッドをコールします。

キーの名前の変更

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​ 関数を使用して合計および小計を取得する関数を定義します。また、数値の加算、減算、乗算も実行します。

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

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

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

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

正規表現の使用

いくつかの DataWeave 関数の引数での正規表現の使用法を示します。

自己終了 XML タグの出力

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

XML タグへの属性の挿入

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

指定した XML 属性の削除

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

XML 属性を渡す

XML 属性を入力元ペイロードから出力 XML に渡します。動的属性式 ​@dynamicAttributes​ を使用して、入力から属性を動的に選択することで、新しい出力タグの属性が作成されます。

XML 名前空間を含める

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

指定したキー-値ペアを含むオブジェクトの削除

オブジェクトの配列から一連のキー-値ペアを含むすべてのオブジェクトを削除します。​filter​ と ​contains​ および ​not​ 演算子を使用します。

複数の入力の参照

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

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

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

日付の解析

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

日付の加算と減算

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

タイムゾーンの変更

タイムゾーン ID と共に ​>>​ を使用してタイムゾーンを変更し、使用可能なタイムゾーン ID のリストを提供します。

日付と時刻の書式設定

uuuu/MM/dd​ などの書式設定文字を使用して、日付と時刻の形式を変更します。カスタム DataWeave 型を使用して、日時形式を作成します。

マルチパートデータの操作

mapObject​ を使用してマルチパートペイロードを反復処理し、各パートからデータを抽出します。また、​read​ と ​boundary​ 値を使用してマルチパートコンテンツを読み取ります。

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

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

関数を引数として渡す

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