我在状态机中定义了以下状态。
"loop":{
"Type": "Pass",
"Result":{
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
我希望状态输出为:
"newFieldsResponse": {
"isSuccess": true,
"error": "",
"body": {
"count": 2,
"fields": [...]
}
},
"iteration": {
"totalCount": 5,
"currentCount": 0,
"step": 1
}
}
迭代属性被添加到输入与TOTALCOUNT属性被设置为计数字段数组项的
但是,“ iteration”属性的输出设置为:
"iteration": {
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
}
看起来值“ $ .newFieldsResponse.body.count”没有得到解析,而是按原样输出。
我在做错什么吗?别人在如何使它工作,请咨询?
答案 0 :(得分:2)
它可以结合以下两种解决方案一起工作:
{
"loop": {
"Type": "Pass",
"parameters": {
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next": "iterateLoop"
}
}
答案 1 :(得分:1)
这可以通过处于通过状态的“参数”来实现 https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-pass-state.html
“循环”:{ “类型”:“通过”, “参数”:{ “ totalCount”:“ $ .newFieldsResponse.body.count”, “ currentCount”:0, “步骤1 }, “ ResultPath”:“ $ .iteration”, “下一个”:“ iterateLoop” }
答案 2 :(得分:1)
在弄清楚之前,我也一直坚持下去。
可以使用通过状态,但是@ankitkanojia和@shashi的答案需要稍作修改。
如果要使用输入路径,则参数内的键必须以“。$”(“ totalCount。$”)结尾
因此状态说明应如下:
"loop":{
"Type": "Pass",
"Result":{
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
答案 3 :(得分:0)
看起来不可能这样。 我所做的解决方法是使用“参数”属性。从AWS文档中: “对于使用路径选择值的键值对,键名必须以*。$结尾。”。
因此通过以下方法解决了上述问题:
"loop":{
"Type": "Pass",
"Result":{
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
"iterateLoop":{
"Type":"Task",
"Resource": "arn:aws:lambda:....r",
"Parameters":{
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount.$": "$.iteration.currentCount",
"step.$": "$.iteration.step"
},
"ResultPath": "$.iteration",
"Next":"continueLoop"
},
totalCount,currentCount和step都使用状态输入中的路径读取值。密钥末尾必须附加“。$”。