マップ関数 ​

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

Mapはキーと値のペアのセット、つまりJSONオブジェクト用のWEL型です。マップ関数は、そのキーと値の読み取り、あるマップと別のマップの結合、フィールドの削除、およびリスト関数が操作できるようにマップとリストの間の変換を行います。

キーは常にStringです。挿入順序は保持されるため、意図した順序で作成されたマップはその順序でシリアル化されます。

_ は、これらの例で式が受け取る入力です。詳細については、入力変数を参照してください。

機能の提供状況

WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。

マップ関数を呼び出す ​

関数を直接呼び出すか、>>を使用して値をパイプします:

text
keys(_.customer)
_.customer >> keys

フィールドはピリオド(.)で読み取ります。キーが計算される場合やベア識別子でない場合は、角かっこ([])を使用します。

text
_.customer.email
_.customer['email']

存在しないキーを読み取るとE104が発生します。最初にテストするにはhas_key?を使用し、デフォルトを指定するにはtry-fallback演算子|?を使用します。

text
_.customer.nickname |? 'none'

キーと値の読み取り ​

次の関数は、マップを変更せずにマップのキーと値を読み取ります。

keys ​

キーを挿入順序でリストとして返します。

text
keys(map)
パラメーター説明
map読み取るマップ。
マップのキーを取得する

次の例は、マップのキーを挿入順序で返します。

Formula

text
keys({sku: 'WID-1', qty: 3})

出力

text
["sku", "qty"]

values ​

値を挿入順序でリストとして返します。 Skipである値は省略されます。

text
values(map)
パラメーター説明
map読み取るマップ。
マップの値を取得する

次の例は、マップの値を挿入順序で返します。

Formula

text
values({sku: 'WID-1', qty: 3})

出力

text
["WID-1", 3]

has_key? ​

キーが存在する場合はtrueを返します。

キーのテストは、値のテストと同じではありません。 null値を持つキーが存在する場合、ここではtrueを返します。使用可能な値をテストするには、代わりにpresent?を使用します。

text
has_key?(map, key)
パラメーター説明
mapテストするマップ。
keyStringとしてのキー名。
存在するキーはtrueを返す

次の例は、マップに存在するキーをテストします。

Formula

text
has_key?({sku: 'WID-1'}, 'sku')

出力

text
true
存在しないキーはfalseを返す

次の例は、マップに存在しないキーをテストします。

Formula

text
has_key?({sku: 'WID-1'}, 'qty')

出力

text
false

フィールドの選択 ​

次の関数は、マップをより小さく安全なフィールドのセットに絞り込みます。

pluck ​

指定されたキーのみを含むマップを返します。存在しないキーは、エラーを発生させるのではなくスキップされます。

これを使用して、大きな受信レコードを宛先が実際に受け入れるフィールドに絞り込みます。

text
pluck(map, keys)
パラメーター説明
map読み取り元のマップ。
keys保持するキー名のリスト。
指定されたキーのみを保持する

次の例は、マップから指定されたキーのみを保持します。

Formula

text
pluck({id: 1, secret: 'x', name: 'a'}, ['id', 'name'])

出力

text
{id: 1, name: "a"}
存在しないキーは、エラーを発生させるのではなくスキップされる

次の例は、存在しないキーをpluckします。このキーは、エラーを発生させるのではなくスキップされます。

Formula

text
pluck({id: 1}, ['id', 'missing'])

出力

text
{id: 1}

except ​

指定されたキーを削除したマップを返します。

pluckとexceptは反対の機能であり、安全性の観点ではどちらを選ぶかが重要です。 pluckは許可リストであるため、アップストリームに新しいフィールドが現れてもデフォルトで破棄されます。 exceptは拒否リストであるため、新しいフィールドはデフォルトで転送されます。新しく追加されたフィールドの漏えいが懸念される場合は、pluckを優先します。

text
except(map, keys)
パラメーター説明
map読み取り元のマップ。
keys削除するキー名のリスト。
指定されたキーを削除する

次の例は、マップから指定されたキーを削除します。

Formula

text
except({id: 1, secret: 'x', name: 'a'}, ['secret'])

出力

text
{id: 1, name: "a"}

ユースケース:転送前に機密フィールドを削除する ​

受信ユーザーレコードには、宛先システムに届くべきではない資格情報が含まれています。レコードを転送する前に機密フィールドを削除するには、exceptを使用します。

入力

json
{
  "user": {
    "id": "U-1",
    "email": "nur@example.com",
    "password": "hunter2",
    "ssn": "111-22-3333"
  }
}

Formula

text
_.user >> except(['password', 'ssn'])

出力

json
{"id": "U-1", "email": "nur@example.com"}

このexceptの使用は拒否リスト形式であり、ソースが送信できるすべてのフィールドを把握している間だけ安全です。ソースがフィールドを追加する可能性がある場合、pluck(['id', 'email'])は同じ意図を表すより安全な式です。

マップの結合 ​

次の関数は、2つのマップを1つに結合します。

merge ​

2つのマップを結合します。両方で同じキーが定義されている場合は、2番目が優先されます。

text
merge(first, second)
パラメーター説明
firstベースマップ。
second値が優先されるマップ。
2つのマップをマージする。競合時は2番目が優先される

次の例は2つのマップをマージします。共有キーでは2番目のマップの値が優先されます。

Formula

text
merge({sku: 'WID-1', qty: 1}, {qty: 5})

出力

text
{sku: "WID-1", qty: 5}

ユースケース:デフォルトセットにオーバーライドを適用する ​

デフォルトのセットに呼び出し元が指定したオーバーライドを重ねて適用する必要があります。指定されたものはすべて優先され、省略されたものはフォールバックされます。 mergeでは、デフォルトを1番目に、呼び出し元の値を2番目に指定します。

入力

json
{
  "overrides": {"currency": "EUR", "notify": true}
}

Formula

text
merge(
  {currency: 'USD', locale: 'en-US', notify: false},
  _.overrides
)

出力

json
{"currency": "EUR", "locale": "en-US", "notify": true}

mergeは1つのレベルを結合します。 2番目の引数にあるネストされたマップは、対応するマップにマージされるのではなく、そのまま置き換えます。

マップとリストの間の変換 ​

これら4つの関数によって、マップはリスト関数に到達できます。 entriesとpairsは一方向に変換します。 from_entriesとfrom_pairsは元に戻します。

entries ​

マップを{key, value}マップのリストに変換します。

text
entries(map)
パラメーター説明
map変換するマップ。
マップをキー/値マップのリストに変換する

次の例は、マップを{key, value}マップのリストに変換します。

Formula

text
entries({sku: 'WID-1', qty: 3})

出力

text
[{key: "sku", value: "WID-1"}, {key: "qty", value: 3}]

from_entries ​

{key, value}マップのリストをマップに戻します。 entriesの逆です。

text
from_entries(list)
パラメーター説明
listそれぞれにkeyとvalueを持つマップのリスト。
キー/値マップのリストをマップに戻す

次の例は、{key, value}マップのリストをマップに戻します。

Formula

text
from_entries([{key: 'sku', value: 'WID-1'}])

出力

text
{sku: "WID-1"}

pairs ​

マップを2要素の[key, value]リストのリストに変換します。値がSkipであるペアは省略されます。

text
pairs(map)
パラメーター説明
map変換するマップ。
マップをキー/値ペアのリストに変換する

次の例は、マップを2要素の[key, value]リストのリストに変換します。

Formula

text
pairs({sku: 'WID-1', qty: 3})

出力

text
[["sku", "WID-1"], ["qty", 3]]

from_pairs ​

2要素の[key, value]リストのリストをマップに戻します。 pairsの逆です。

text
from_pairs(list)
パラメーター説明
list2要素リストのリスト。
キー/値ペアのリストをマップに戻す

次の例は、2要素の[key, value]リストのリストをマップに戻します。

Formula

text
from_pairs([['sku', 'WID-1']])

出力

text
{sku: "WID-1"}

変換せずにマップをフィルターする

filter_byはマップを直接受け入れます。ラムダはキーと値の2つのパラメーターを受け取り、結果はマップになります。

text
{a: 1, b: 2} >> filter_by((k, v) ~> v > 1)

ネストされたマップのフラット化 ​

次の関数は、ネストされたマップを単一レベルに折りたたみ、パスを1つのキーに結合します。

flatten_map ​

ネストされたマップを単一レベルに折りたたみ、パスを1つのキーに結合します。

走査は挿入順序で深さ優先です。マップのみが下位にたどられます。リストはリーフ値として扱われ、全体が保持されます。空のネストされたマップもリーフです。

2つのネストされたキーが、同じフラット化されたキーに折りたたまれることがあります。最後の書き込みが優先され、その場合はE229警告が発行されるため、競合はサイレントではなくジョブ内で確認できます。

text
flatten_map(map, options)
パラメーター説明
mapフラット化するマップ。
optionsフラット化を制御するオプションのマップ。
  • sep: キー区切り文字。デフォルトは.です。
  • max_depth: 下位にたどるレベル数。デフォルトは無制限です。

認識されないオプションキーは無視されず、E222を発生させます。

デフォルトの区切り文字でネストされたマップをフラット化する

次の例は、デフォルトの.区切り文字でパスを結合して、ネストされたマップをフラット化します。

Formula

text
flatten_map({customer: {name: 'Nur', address: {city: 'London'}}})

出力

text
{"customer.name": "Nur", "customer.address.city": "London"}
カスタム区切り文字でネストされたマップをフラット化する

次の例は、カスタム区切り文字を使用してネストされたマップをフラット化します。

Formula

text
flatten_map({a: {b: 1}}, {sep: '_'})

出力

text
{a_b: 1}

ユースケース:CSV行用にレコードをフラット化する ​

CSVの宛先ではフィールドごとに1つの列が必要ですが、ソースは2レベルの深さでネストされています。マップ関数を使用して、レコードを単一レベルにフラット化します。

入力

json
{
  "record": {
    "id": "C-1",
    "customer": {
      "name": "Nur",
      "address": {"city": "London", "postcode": "E1"}
    }
  }
}

Formula

text
_.record >> flatten_map

出力

json
{
  "id": "C-1",
  "customer.name": "Nur",
  "customer.address.city": "London",
  "customer.address.postcode": "E1"
}

フラット化されたキーは、宛先が期待する列ヘッダーそのものです。ターゲットがヘッダー名のドットを受け入れない場合は、{sep: '_'}を渡します。

最終更新日: