如何在Glue Python作业中读取并解析Step Function的输入状态?
如何从Step Function传递的参数中访问Glue作业里的
input数组内容? 我来帮你解决这个问题——本质上是因为Step Function传递的参数是JSON字符串,而非直接可用的Python对象,所以需要额外做一步解析操作。
先梳理下你的场景:
你的Step Function生成的输入结构是这样的:
{ "name": "Done", "input": [ { "success": "123" }, { "failing": "123" } ], "inputDetails": { "truncated": false } }
对应的Step Function任务配置里,你用$$.input把整个输入传递给了Glue作业的--job-output-states参数,但在Glue代码里直接打印args只能拿到原始的字符串,没法直接访问input数组。
问题根源
当你在Step Function的Parameters里用$$.input传递数据时,Step Function会把整个JSON结构序列化为字符串传给Glue作业,所以你拿到的args["job-output-states"]是一个JSON格式的字符串,而不是Python的字典或列表,自然没法直接通过键名访问内部的input数组。
解决方法
只需要在Glue代码里把这个JSON字符串反序列化为Python对象即可,具体修改如下:
import sys import json # 新增导入json模块 from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, [ "job-output-states" ]) # 把JSON字符串解析成Python字典 step_function_data = json.loads(args["job-output-states"]) # 现在就能直接访问input数组了 input_array = step_function_data["input"] print("Input数组内容:", input_array) # 如果要访问数组里的具体元素,比如第一个对象的success字段 success_id = input_array[0]["success"] print("Success对应的ID:", success_id) # 第二个对象的failing字段 failing_id = input_array[1]["failing"] print("Failing对应的ID:", failing_id)
小提示
如果你不确定传递过来的参数是什么样子,可以先打印原始的字符串看看:
print("原始参数内容:", args["job-output-states"])
这样能确认它确实是JSON字符串,方便你后续调整解析逻辑。
内容的提问来源于stack exchange,提问作者Randomize
相关产品推荐
相关产品推荐

