JSON関数
JSON関数は、JSONテキストとWEL値の間で変換し、パスで構造をクエリします。
通常のレシピデータでJSON関数が必要になることはほとんどありません。入力フィールドはすでにWEL値として到着し、データを変換アクションが結果をシリアライズします。フィールド内にJSONが存在する場合、たとえば本文を文字列として配信するウェブフック、JSONドキュメントを保持するデータベース列、または送信先にテキストとして渡す必要があるペイロードなどで使用します。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
変換
次の関数は、JSONテキストとWEL値の間で変換します:
parse_json
JSON文字列をWEL値に解析します。
parse_json(text, options)| パラメーター | 説明 |
|---|---|
| テキスト | 解析するJSON文字列。 |
| options | JSONの解析方法を制御するオプションのマップ。
|
認識されないオプションキーは無視されず、E222を発生させます。
JSON文字列をWEL値に解析する
次の例では、JSON文字列をWEL値に解析します:
Formula
parse_json('{"sku": "WID-1", "qty": 3}')出力
{sku: "WID-1", qty: 3}デフォルトでは金額の解析で精度が失われます
小数部を含むJSON数値はFloatになるため、149.50は149.5として解析され、小数位のスケールが失われます。フィールドが通貨金額の場合は、decimalオプションを渡して、代わりに正確なDecimalになるようにします。金額でDecimalが重要な理由については、データ型を参照してください。
to_json
WEL値をJSON文字列にシリアライズします。
WELはListまたはMapを文字列に暗黙的に変換することはありません。誤って文字列化されたコレクションは、下流で最も見つけにくい変換バグの1つだからです。代わりに、これをテキストにするには、この関数または別の明示的なシリアライザーを呼び出します。
to_json(value, options)| パラメーター | 説明 |
|---|---|
| value | シリアライズする値。 |
| options | シリアライズ設定のオプションマップ。 |
WEL値をJSON文字列にシリアライズする
次の例では、WEL値をJSON文字列にシリアライズします:
Formula
to_json({sku: 'WID-1', qty: 3})出力
{"sku":"WID-1","qty":3}ユースケース: JSON文字列フィールドを展開する
ウェブフックは本文を単一の文字列フィールドとして配信します。 JSON関数を使用して解析し、送信先が受け入れるフィールドのみを保持します:
入力
{
"payload": "{\"order_id\":\"SO-1001\",\"total\":149.5,\"internal\":true}"
}Formula
parse_json(_.payload) >> pluck(['order_id', 'total'])出力
{"order_id": "SO-1001", "total": 149.5}pluckは許可リストであるため、internalは削除され、ソースが後で追加するフィールドも削除されます。
パスでクエリ
次の関数は、先にWEL値に解析することなく、JSONPath式を使用して構造をクエリします:
json_path
WELがサポートするRFC 9535 JSONPathのサブセットを使用して値をクエリします。一致するノードのListを常に返します。一致するものがない場合は空のリストであり、nullになることはありません。
サポートされているセレクター:
| セレクター | 構文 | 意味 |
|---|---|---|
| ルート | $ | 渡された値 |
| 子 | .key, ['key'] | 名前付きフィールド |
| インデックス | [0], [-1] | リスト内の位置。負の数は末尾から数えます |
| ワイルドカード | [*], .* | すべての要素またはすべての値 |
| 再帰的降下 | ..key, ..* | 任意の深さで一致 |
| スライス | [start:end:step] | リストの範囲 |
フィルター、和集合、および関数拡張は実際のRFC 9535機能ですが、WELでは現在サポートされていません。これらはE224を発生させます。代わりにdeep_collect_byまたはfilter_byを使用します。無効なセレクターはE223を発生させます。
json_path(value, path)| パラメーター | 説明 |
|---|---|
| value | クエリする構造。 |
| パス | StringとしてのJSONPath式。 |
ワイルドカードでネストされた構造をクエリする
次の例では、ワイルドカードを使用してネストされたリストからすべての価格を収集します:
Formula
json_path({store: {book: [{price: 10}, {price: 20}]}}, '$.store.book[*].price')出力
[10, 20]再帰的降下で任意の深さにある値をクエリする
次の例では、再帰的降下を使用して任意の深さにあるキーを検索します:
Formula
json_path({a: {b: {c: 'x'}}}, '$..c')出力
["x"]一致しないパスは空のリストを返す
次の例では、パスが何にも一致しない場合に空のリストを返します:
Formula
json_path({a: 1}, '$.missing')出力
[]ユースケース: ネストされたレスポンスからすべてのSKUを取り出す
APIは注文を返し、それぞれに独自の明細項目があります。各レベルを個別にたどるのではなく、1つの再帰パスでJSONPath式を使用してすべてのSKUを収集します:
入力
{
"orders": [
{"line_items": [{"sku": "WID-1"}, {"sku": "GAD-7"}]},
{"line_items": [{"sku": "BOX-2"}]}
]
}Formula
json_path(_, '$..line_items[*].sku')出力
["WID-1", "GAD-7", "BOX-2"]結果は常にリストであるため、注文のないペイロードでは[]になります。以降のステップは、nullで失敗するのではなく動作し続けます。
関連情報
最終更新日: