JSON関数 ​

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

JSON関数は、JSONテキストとWEL値の間で変換し、パスで構造をクエリします。

通常のレシピデータでJSON関数が必要になることはほとんどありません。入力フィールドはすでにWEL値として到着し、データを変換アクションが結果をシリアライズします。フィールド内にJSONが存在する場合、たとえば本文を文字列として配信するウェブフック、JSONドキュメントを保持するデータベース列、または送信先にテキストとして渡す必要があるペイロードなどで使用します。

機能の提供状況

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

変換 ​

次の関数は、JSONテキストとWEL値の間で変換します:

parse_json ​

JSON文字列をWEL値に解析します。

text
parse_json(text, options)
パラメーター説明
テキスト解析するJSON文字列。
optionsJSONの解析方法を制御するオプションのマップ。
  • numbers: JSON数値の表現方法。
  • decimal: 小数をFloatではなくDecimalとして解析します。

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

JSON文字列をWEL値に解析する

次の例では、JSON文字列をWEL値に解析します:

Formula

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

出力

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

デフォルトでは金額の解析で精度が失われます

小数部を含むJSON数値はFloatになるため、149.50は149.5として解析され、小数位のスケールが失われます。フィールドが通貨金額の場合は、decimalオプションを渡して、代わりに正確なDecimalになるようにします。金額でDecimalが重要な理由については、データ型を参照してください。

to_json ​

WEL値をJSON文字列にシリアライズします。

WELはListまたはMapを文字列に暗黙的に変換することはありません。誤って文字列化されたコレクションは、下流で最も見つけにくい変換バグの1つだからです。代わりに、これをテキストにするには、この関数または別の明示的なシリアライザーを呼び出します。

text
to_json(value, options)
パラメーター説明
valueシリアライズする値。
optionsシリアライズ設定のオプションマップ。
WEL値をJSON文字列にシリアライズする

次の例では、WEL値をJSON文字列にシリアライズします:

Formula

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

出力

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

ユースケース: JSON文字列フィールドを展開する ​

ウェブフックは本文を単一の文字列フィールドとして配信します。 JSON関数を使用して解析し、送信先が受け入れるフィールドのみを保持します:

入力

json
{
  "payload": "{\"order_id\":\"SO-1001\",\"total\":149.5,\"internal\":true}"
}

Formula

text
parse_json(_.payload) >> pluck(['order_id', 'total'])

出力

json
{"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を発生させます。

text
json_path(value, path)
パラメーター説明
valueクエリする構造。
パスStringとしてのJSONPath式。
ワイルドカードでネストされた構造をクエリする

次の例では、ワイルドカードを使用してネストされたリストからすべての価格を収集します:

Formula

text
json_path({store: {book: [{price: 10}, {price: 20}]}}, '$.store.book[*].price')

出力

text
[10, 20]
再帰的降下で任意の深さにある値をクエリする

次の例では、再帰的降下を使用して任意の深さにあるキーを検索します:

Formula

text
json_path({a: {b: {c: 'x'}}}, '$..c')

出力

text
["x"]
一致しないパスは空のリストを返す

次の例では、パスが何にも一致しない場合に空のリストを返します:

Formula

text
json_path({a: 1}, '$.missing')

出力

text
[]

ユースケース: ネストされたレスポンスからすべてのSKUを取り出す ​

APIは注文を返し、それぞれに独自の明細項目があります。各レベルを個別にたどるのではなく、1つの再帰パスでJSONPath式を使用してすべてのSKUを収集します:

入力

json
{
  "orders": [
    {"line_items": [{"sku": "WID-1"}, {"sku": "GAD-7"}]},
    {"line_items": [{"sku": "BOX-2"}]}
  ]
}

Formula

text
json_path(_, '$..line_items[*].sku')

出力

json
["WID-1", "GAD-7", "BOX-2"]

結果は常にリストであるため、注文のないペイロードでは[]になります。以降のステップは、nullで失敗するのではなく動作し続けます。

  • ディープマップ関数: json_pathがサポートしないフィルターを含め、述語で値を収集します。
  • マップ関数: pluck、except、およびflatten_mapに関する情報。
  • データ型: 金額の解析時にDecimalが重要な理由。
  • エラーコード: E222、E223、E224などのジョブ失敗をトラブルシューティングします。

最終更新日: