[英]AWS Step function - The value for the field 'null' must be a STRING
[英]AWS Step Function: check for null
步驟 Function 定義如下:
{
"StartAt": "Decision_Maker",
"States": {
"Decision_Maker":{
"Type": "Choice",
"Choices": [
{
"Variable": "$.body.MyData",
"StringEquals": "null", //that doesn't work :(
"Next": "Run_Task1"
}],
"Default": "Run_Task2"
},
"Run_Task1": {
"Type": "Task",
"Resource": "url_1",
"Next": "Run_Task2"
},
"Run_Task2": {
"Type": "Task",
"Resource": "url_2",
"End": true
}
}
}
基本上它是兩個任務之間的選擇。 輸入數據是這樣的:
{
"body": {
"prop1": "value1",
"myData": {
"otherProp": "value"
}
}
}
問題是有時 JSON 中沒有 myData。 所以輸入可能是這樣的:
{
"body": {
"prop1": "value1",
"myData": null
}
}
如何檢查 myData 是否為 null?
截至 2020 年 8 月,亞馬遜狀態語言現在有一個isNull
和isPresent
選擇規則。 使用這些,您可以本機檢查null
或選擇 state 內的 state 輸入中是否存在密鑰。
例子:
{ "Variable": "$.possiblyNullValue", "IsNull": true }
順序很重要。 首先設置 " IsPresent": false
,然后設置"IsNull": true
,最后是標量比較。
"Check MyValue": {
"Comment": "Check MyValue",
"Type": "Choice",
"Default": "ContinueWithMyValue",
"Choices": [
{
"Or": [
{
"Variable": "$.MyValue",
"IsPresent": false
},
{
"Variable": "$.MyValue",
"IsNull": true
},
{
"Variable": "$.MyValue",
"BooleanEquals": false
}
],
"Next": "HaltProcessing"
},
{
"Variable": "$.MyValue",
"BooleanEquals": true,
"Next": "ContinueWithMyValue"
}
]
},
根據我的經驗,選擇類型不能處理空值。 最好的方法可能是在第一個 state 中使用 lambda 預處理您的輸入,並將事件格式化為“null”。 下面的代碼片段可能會有所幫助。
def lambda_handler(event, context):
if event['body']['MyData']:
return event
else:
event['body']['MyData']="null"
return event
注意:這也處理空字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.