我在AWS步骤函数中有一个选择状态,它将比较输入的数组长度,并决定进入下一个状态。
但是,length()
函数在获取数组长度时返回了一个错误:
{
“错误”:“状态.运行时间”,
“原因”:“执行状态'CheckItemsCountState'(在事件ID #18处输入)时出错。无效路径'$.Metadata[2].Items.length()':选择状态的条件路径引用了无效值。”
}
选择状态的定义如下:
"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": []
}
]
}
所以我试着在Metadata[2]
中得到Items
的长度,如果值大于0,就进行比较。
我尝试验证此website中的JsonPath $.Metadata[2].Items.length()
,但它返回0。
我不确定我是否错过了什么,我在AWS Step Function的文档或示例中找不到任何关于在jsonpath中使用函数的信息。
我将感激你的帮助。谢谢!
3条答案
按热度按时间u59ebvdq1#
步骤函数不允许您使用函数获取值。从选择规则文档中:
对于这些运算符中的每一个,对应的值必须为适当的类型:字符串、数字、布尔值或时间戳。
要执行您所要求的操作,您需要在前面的函数中获取数组长度,并将其作为输出的一部分返回。
然后在步骤功能选择步骤中:
nxagd54h2#
一种可能的方法是检查零索引,如果你只想检查它是一个非空数组。
你可以做这样的事
另一种方法是在接受的答案中提到的,在前面的函数中设置计数。
atmip9wb3#
AWS阶跃函数增加了14个内在函数,包括
States.ArrayLength
,将解决此问题:https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html#asl-intrsc-func-arrays例如,给定以下输入数组:
可以使用States.ArrayLength返回inputArray的长度:
在本例中,States.ArrayLength将返回以下JSON对象,该对象表示数组长度: