我在AWS Step Function中有一个Choice状态,可以比较Input的数组长度并决定下一个状态。
但是,获取数组长度的length()
函数返回错误:
{
“错误”:“States.Runtime”,
“cause”:“执行状态'CheckItemsCountState'时发生错误(在事件ID#18处输入)。无效路径'$ .Metadata [2] .Items.length()':选择状态的条件路径引用无效值。”}
Choice州的定义如下:
"CheckItemsCountState":{
"Type": "Choice",
"InputPath": "$",
"OutputPath": "$",
"Default": "NoItemsState",
"Choices":[
{
"Variable": "$.Metadata[2].Items.length()",
"NumericGreaterThan": 0,
"Next": "ProcessState"
}
]
},
状态连接其他一些返回JSON的状态。 JSON如下:
{
"Metadata": [
{
"foo": "name"
},
{
"Status": "COMPLETED"
},
{
"Items": []
}
]
}
所以我试图在Items
中获得Metadata[2]
的长度,并在值大于0时进行比较。
我尝试在此website中验证JsonPath $.Metadata[2].Items.length()
并返回0.
我不确定我是否遗漏了任何东西。我在AWS Step Function的文档或示例中找不到有关在jsonpath中使用函数的任何信息。
我希望得到任何帮助。谢谢!
答案 0 :(得分:2)
步骤函数不允许您使用函数来获取值。来自Choice Rules documentation:
对于这些运算符中的每一个,相应的值必须是 适当的类型:字符串,数字,布尔值或时间戳。
要做你想要的,你需要在前一个函数中获取数组长度并将其作为输出的一部分返回。
{
"Metadata": [
{
"foo": "name"
},
{
"Status": "COMPLETED"
},
{
"Items": [],
"ItemsCount": 0
}
]
}
然后在步骤功能选择步骤中:
"CheckItemsCountState":{
"Type": "Choice",
"InputPath": "$",
"OutputPath": "$",
"Default": "NoItemsState",
"Choices":[
{
"Variable": "$.Metadata[2].ItemsCount",
"NumericGreaterThan": 0,
"Next": "ProcessState"
}
]
},
答案 1 :(得分:0)
一种可能的方法是检查零索引,如果您只想检查它是一个非空数组。
你可以这样做
"CheckItemsCountState":{
"Type": "Choice",
"InputPath": "$",
"OutputPath": "$",
"Default": "NoItemsState",
"Choices":[
{
"And": [
{
"Variable": "$.Metadata[2].Items",
"IsPresent": true
},
{
"Variable": "$.Metadata[2].Items[0]",
"IsPresent": true
}
],
"Next": "ProcessState"
}
]
}
另一种方式是在接受的答案中提到的,在前一个函数中设置计数。