AWS Step Function:检查是否为空
AWS Step Function: check for null
步进函数定义如下:
{
"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
}
}
}
基本上是在 2 个任务之间进行选择。
输入数据是这样的:
{
"body": {
"prop1": "value1",
"myData": {
"otherProp": "value"
}
}
}
问题是有时 JSON 中没有 myData。所以输入可能是这样的:
{
"body": {
"prop1": "value1",
"myData": null
}
}
如何检查 myData 是否为空?
根据我的经验,选择类型无法处理空值。最好的方法是在第一个状态下使用 lambda 预处理您的输入,然后 return 事件将其格式化为“null”。下面的代码片段可能会有所帮助。
def lambda_handler(event, context):
if event['body']['MyData']:
return event
else:
event['body']['MyData']="null"
return event
注意:这也处理空字符串。
自 2020 年 8 月起,Amazon States Language 现在具有 isNull
和 isPresent
选择规则。 使用这些您可以本地检查 null
或在 Choice 状态中的状态输入中存在键。
示例:
{ "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"
}
]
},
步进函数定义如下:
{
"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
}
}
}
基本上是在 2 个任务之间进行选择。 输入数据是这样的:
{
"body": {
"prop1": "value1",
"myData": {
"otherProp": "value"
}
}
}
问题是有时 JSON 中没有 myData。所以输入可能是这样的:
{
"body": {
"prop1": "value1",
"myData": null
}
}
如何检查 myData 是否为空?
根据我的经验,选择类型无法处理空值。最好的方法是在第一个状态下使用 lambda 预处理您的输入,然后 return 事件将其格式化为“null”。下面的代码片段可能会有所帮助。
def lambda_handler(event, context):
if event['body']['MyData']:
return event
else:
event['body']['MyData']="null"
return event
注意:这也处理空字符串。
自 2020 年 8 月起,Amazon States Language 现在具有 isNull
和 isPresent
选择规则。 使用这些您可以本地检查 null
或在 Choice 状态中的状态输入中存在键。
示例:
{ "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"
}
]
},