如何在Step Function中从对象数组输入提取metaData作为下一步输入
问题描述
当前Step Function的输出是对象数组格式:
[{"status" : "VALIDATION_FAILED","memberData":{"metaData" : {"fileId" : 101,"FileName" : "abc.txt"}}}]
想要把里面的metaData作为下一个Step的输入,但用常规的inputPath: $.status这类方式访问时,因为输入是带[]的数组,会报错:Invalid path '$.status' : Property ['status'] not found in path $,没法正常访问内部变量。
解决方法
核心原因是输入是数组类型,不能直接用对象属性路径访问,得先通过数组索引定位到数组里的对象,再提取目标字段,下面是两种常用的解决方式:
方式1:用inputPath直接定位到metaData
通过数组索引[0]先拿到数组里的第一个对象,再逐级访问到metaData:
"NextStepName": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:lambda:function:YourFunction", "InputPath": "$[0].memberData.metaData", "End": true }
这么配置后,下一个Step的输入就会直接是:
{"fileId" : 101,"FileName" : "abc.txt"}
方式2:用Parameters字段提取并自定义输入结构
如果需要保留部分其他字段,或者想重新构造输入的结构,可以用Parameters来精准提取:
"NextStepName": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:lambda:function:YourFunction", "Parameters": { "fileId.$": "$[0].memberData.metaData.fileId", "fileName.$": "$[0].memberData.metaData.FileName" }, "End": true }
这种方式可以自己定义输出的字段名和结构,灵活性更强。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

