Fur*_*ikh 7 json jsonpath amazon-web-services aws-step-functions
我在我的状态机中定义了以下状态。
"loop":{
"Type": "Pass",
"Result":{
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
Run Code Online (Sandbox Code Playgroud)
我希望状态的输出是:
"newFieldsResponse": {
"isSuccess": true,
"error": "",
"body": {
"count": 2,
"fields": [...]
}
},
"iteration": {
"totalCount": 5,
"currentCount": 0,
"step": 1
}
}
Run Code Online (Sandbox Code Playgroud)
迭代属性被添加到输入中,totalCount 属性被设置为字段数组中的项目数。
但是,“迭代”属性的输出设置为:
"iteration": {
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
}
Run Code Online (Sandbox Code Playgroud)
看起来值 "$.newFieldsResponse.body.count" 没有得到解析,而是按原样输出。
有什么我做错了吗?有人可以就如何使其工作提出建议吗?
小智 11
它结合了此处公开的两种解决方案:
{
"loop": {
"Type": "Pass",
"parameters": {
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next": "iterateLoop"
}
}
Run Code Online (Sandbox Code Playgroud)
JSON
{
"loop": {
"Type": "Pass",
"Parameters": {
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next": "iterateLoop"
}
}
Run Code Online (Sandbox Code Playgroud)
看起来这可能是不可能的。我所做的解决方法是使用“Parameters”属性。来自 AWS 文档:“对于使用路径选择值的键值对,键名称必须以 *.$ 结尾。”。
因此通过以下方式解决了上述问题:
"loop":{
"Type": "Pass",
"Result":{
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
Run Code Online (Sandbox Code Playgroud)
"iterateLoop":{
"Type":"Task",
"Resource": "arn:aws:lambda:....r",
"Parameters":{
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount.$": "$.iteration.currentCount",
"step.$": "$.iteration.step"
},
"ResultPath": "$.iteration",
"Next":"continueLoop"
},
Run Code Online (Sandbox Code Playgroud)
TotalCount、currentCount 和 step 均使用状态输入中的路径读取值。密钥末尾需要附加“.$”。
| 归档时间: |
|
| 查看次数: |
14659 次 |
| 最近记录: |