DataWeaveを使いこなす その3

スポンサーリンク

使い方例

今回は配列を使った操作でよく使うものをピックアップします。

配列の展開

map関数を使用して配列の内容を展開する書き方ができます。DataWeaveにはfor文がありませんので、配列の中身を見る場合にはmapを使用することになると思います。

書き方は以下のような形になります。

%dw 2.0
output application/json
---
配列 map ((変数名1, 変数名2) -> {
    // 配列の中身の処理
})

変数名1には配列の要素の値がセットされ、変数名2には配列のインデックス番号(数値)がセットされます。{}内に中身を展開して自由に記載するような形となります。

具体的に配列や変数を当てはめて使ってみます。

%dw 2.0
output application/json
---
["banana", "apple", "orange"] map ((value, index) -> {
    fruit: index ++ "-" ++ value
})

3つの果物が入った配列で上記DataWeaveを実行すると、結果は以下のようになります。

[
  {
    "fruit": "0-banana"
  },
  {
    "fruit": "1-apple"
  },
  {
    "fruit": "2-orange"
  }
]

このようにindexに配列の番号、valueに配列の要素が入っていることが分かります。mapを使用した配列の展開はよく使用するので覚えておきましょう。

配列の抽出

この辺りからだんだん複雑になっていきます。前述のmapでは無条件で配列の全要素に対して展開していました。配列の中で使いたいものだけを条件を抽出して使用するにはこのfilter関数を使用します。コードの書き方は以下の通りです。

%dw 2.0
output application/json
---
filter(配列, 抽出条件)

配列部分にはそのまま変数などを入れますが、抽出条件の方は少し書き方が特殊です。配列の中身で精査するため、map関数で使用したようなインデックス変数または値が格納された変数を使用します。具体的な書き方は以下のような形です。

%dw 2.0
output application/json
---
filter(
	["banana", "apple", "orange"],
	(value, index) -> value == "apple"
)

上記コードは3つの果物が入った配列のうち、「apple」のみを抽出するfilterの書き方になります。抽出条件のところには、配列の値が格納されているvalue変数に対し、valueがappleのものという条件を使用して条件の抽出を行っています。この場合は、indexこそ定義はしているものの、条件としては使用しないのでvalueのみの条件判定のみとなります。上記DataWeave式に対する出力はappleのみが抽出された形になります。

[
  "apple"
]

条件式は不等式なども可能で、以下のように数値に対して、またJSONに対してその中身について条件を適用させることも可能です。単価が100円より大きい果物を出力するDataWeave式です。

%dw 2.0
output application/json
var fruitData =[
	{
		"fruit" : "banana",
		"unitPrice" : 250
	},
	{
		"fruit" : "apple",
		"unitPrice" : 120
	},
	{
		"fruit" : "orange",
		"unitPrice" : 100
	}
]
---
filter(
	fruitData,
	(value, index) -> value.unitPrice > 100
)

この式の出力は以下のようになります。

[
  {
    "fruit": "banana",
    "unitPrice": 250
  },
  {
    "fruit": "apple",
    "unitPrice": 120
  }
]

今回は配列を扱う上で必須となりそうな2機能の使い方を紹介しました。DataWeaveにはまだまだ幅広い使い道がありますので、個人的によく使いそうなものをまだまだ書き留めていきたいと思います。

MuleSoft
スポンサーリンク

コメント