ステップ関数に渡されたパラメータのデフォルト値を持ちたいです。
例えば。、
"Parameters": {
"foo.$": "$.foo" OR "bar" if "$.foo" not specified
}
jSONPATHでこのネイティブにこれを行う方法はありますか、それとも選択+パス状態を使用する必要がありますか?
入力にパラメータが指定されていないときに壊れないようにする方法があった場合、選択/パスを使用するために解決することさえ選択しました。
入力に"foo": ""
が含まれていない場合は、"JSONPath ... could not be found in the input."
のようなエラーが発生します。
StepFunctionが実行されるたびにJSONを挿入するCloudWatchルールを作成することで、この問題を解決できました。
CloudWatch> [ルール]> [ターゲット]> [StepFunction]> [Input]> [Configure]> [Constant]> [JSONテキスト]
あなたはそこにあなたのデフォルトのJSONを挿入することができます、そのJSONがあなたのhentefunctionが実行されるたびに挿入されます。
JSONPATHはJSONのみを問い合わせることができ、その場でデータを追加することはできません。デフォルト値は入力に存在する必要があります。多くのテストの後、私はこれを行う「きれいな」方法を見つけることができませんでしたが、これを達成するためのいくつかの方法です。
方法1 :
入力にパラメータが存在しない場合は、壊れない方法で決済されたので、これは実際には非常に簡単ですが、デフォルト値を送信することはできません(空の配列を除く) )値が欠落している場合。これを行うには、複数の子供を指定して、私たちのリーフノードの特定の値を除外することができます([''(、 '')])。たとえば、JSONPATH "$。['bar'、 'foo']"はノードバーとfooを含むリーフノードのみを除外しますが、どちらかまたは両方が欠落している場合はエラーを返しません。欠落しているすべての子の場合、それは空の配列[]を返します。これを説明するためのステートマシンの例です。
{
"StartAt": "ExampleLeafNodes",
"States": {
"ExampleLeafNodes": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "State1-BarPresent",
"States": {
"State1-BarPresent": {
"Type": "Pass",
"Parameters": {
"Bar": "Baz"
},
"Next": "State2-BarPresent"
},
"State2-BarPresent": {
"Type": "Pass",
"Parameters": {
"Foo.$": "$.['Bar','AnyOtherField']"
},
"End": true
}
}
},
{
"StartAt": "State1-BarNotPresent",
"States": {
"State1-BarNotPresent": {
"Type": "Pass",
"Parameters": {
"Field1": "Value1"
},
"Next": "State2-BarNotPresent"
},
"State2-BarNotPresent": {
"Type": "Pass",
"Parameters": {
"Foo.$": "$.['Bar','AnyOtherField']"
},
"End": true
}
}
}
],
"End": true
}
}
}
_
方法2 :
入力の構造をどのくらいのコントロールにかけて、入力から他の変数を参照する必要がない場合に応じて、入力パスとパラメータを使用して単一の状態でこれを行うことができます。この背後にある考え方は、次の形式の状態への入力を取得することです。
"OutputArray": [
{
"Bar": {
"Value": [
"Baz"
]
}
},
{
"Foo": {
"Value": [
"DefaultValueFoo"
]
}
}
]
_
配列の最初の要素は、値が欠落している場合、デフォルト値(foo)が最初の要素になります。最初の要素は常に存在するので、最初の要素の値を取得するには、JSONPATH "$ ['outputArray'] [0]値"を使用できます。その後、パラメータの後、JSONPATH "$ [0] [0]を使用して正確な値を抽出できます。この例のステートマシンの例は次のとおりです。
{
"StartAt": "State1",
"States": {
"State1": {
"Type": "Pass",
"Parameters": {
"OutputArray": [
{
"Bar": {
"Value": [
"Baz"
]
}
},
{
"Foo": {
"Value": [
"DefaultValueFoo"
]
}
}
]
},
"Next": "State2"
},
"State2": {
"Type": "Pass",
"InputPath": "$['OutputArray'][0]..Value",
"Parameters": {
"Foo.$": "$[0][0]"
},
"End": true
}
}
}
_