DataWeaveを使いこなす その4

スポンサーリンク

使い方例

今回はDataWeave内で実施される分岐処理について書き方のポイントを押さえておきたいと思います。

if文による分岐

Dataweaveにはif文を使用した分岐処理を使用することができます。

if (条件式1) 値1
else if (条件式2) 値2
else if (条件式3) 値3
・・・
else 値n

使い方自体は他のプログラム言語とほぼほぼ同じような使い方なので慣れればそれほど難しくないでしょう。

具体的にデータを当てはめて使ってみましょう。Transform Messageを以下のように記載した場合、

%dw 2.0
output application/json
var vegetableData = [
	{
		"vegetable" : "大根",
		"kind" : 1
	},
	{
		"vegetable" : "キャベツ",
		"kind" : 2
	},
	{
		"vegetable" : "トマト",
		"kind" : 3
	}
]
---
vegetableData map(value, index) ->(
{
	"vegetable": value.vegetable,
	"kindName": if(value.kind == 1) "根菜類" 
		else if(value.kind == 2) "葉茎菜類" 
		else if(value.kind == 3) "果菜類" 
		else "その他"
})

返ってくるJSONは以下のようになります。

[
  {
    "vegetable": "大根",
    "kindName": "根菜類"
  },
  {
    "vegetable": "キャベツ",
    "kindName": "葉茎菜類"
  },
  {
    "vegetable": "トマト",
    "kindName": "果菜類"
  }
]

このように、kind部分がif文によって変換がかけられていることが分かります。if文は特に変換処理で使用されることが多く、基本操作の1つとなりますので是非押さえておきましょう。

if文を使ったJSONの編集

次はif文を使った応用です。データについてはJSON形式が見やすいので扱う機会が多くなるかと思いますが、JSON文を加工する際によく使うテクニックとなります。値がある場合はキー項目ごと記載、値がない場合はキー項目ごと記載しないといった場面で以下のような形式で記載することで、キー項目の記載有無を切り替えることができます。

{
    ("キー項目": 値) if 値?
}

ちょっと上のフォーマットだと分かりづらいので、実際のデータに当てはめて使ってみると、以下のような感じになります。

%dw 2.0
output application/json
var accountData = [
	{
		"Name" : "鈴木商事",
		"AccountNumber" : "1234",
		"Phone" : "000-1111-2222"
	},
	{
		"Name" : "田中組合",
		"Phone" : "000-3333-4444"
	},
	{
		"Name" : "高橋建設",
		"AccountNumber" : ""
	}
]
---
accountData map(value, index) ->(
{
	"Name": value.Name,
	("AccountNumber": value.AccountNumber) if value.AccountNumber?,
	("Phone": value.Phone) if value.Phone?
})

上記で返されるJSONは以下のようになります。

[
  {
    "Name": "鈴木商事",
    "AccountNumber": "1234",
    "Phone": "000-1111-2222"
  },
  {
    "Name": "田中組合",
    "Phone": "000-3333-4444"
  },
  {
    "Name": "高橋建設",
    "AccountNumber": ""
  }
]

このように、キー項目にないものはJSONに記載されないようにすることができます。ただし、高橋検察のAccountNumberのように値がブランクのものは表示されたままとなってしまうため、値がnullやブランクのものも表示しないようにするためには、以下のように記載することでnullやブランクの値をキー項目ごと載せないようにすることができます。if文以降の太字の部分を書き換えます。

%dw 2.0
output application/json
var accountData = [
	{
		"Name" : "鈴木商事",
		"AccountNumber" : "1234",
		"Phone" : "000-1111-2222"
	},
	{
		"Name" : "田中組合",
		"Phone" : "000-3333-4444"
	},
	{
		"Name" : "高橋建設",
		"AccountNumber" : ""
	}
]
---
accountData map(value, index) ->(
{
	"Name": value.Name,
	("AccountNumber": value.AccountNumber) if !isBlank(value.AccountNumber),
	("Phone": value.Phone) if !isBlank(value.Phone)
})

上記のコードで実行すると返却されるJSONはこのようになります。

[
  {
    "Name": "鈴木商事",
    "AccountNumber": "1234",
    "Phone": "000-1111-2222"
  },
  {
    "Name": "田中組合",
    "Phone": "000-3333-4444"
  },
  {
    "Name": "高橋建設"
  }
]

これにて、ブランクのものもキー項目ごと載せないようにすることができました。Salesforce上でデータ操作をする場合、明示的にnull更新しないようにする際などによく使うテクニックとなりますので書き方を是非覚えておきましょう。

MuleSoft
スポンサーリンク

コメント