如何在AWS Step Functions中通过JSONPath动态获取对象路径?
在AWS Step Functions中动态读取嵌套配置的更优方法
我有存储在Step Functions的$.config变量中的配置对象:
{ "DE": { "hello": "hallo" }, "EN": { "hello": "hello" }, "ES": { "hello": "hola" } }
同时存在变量$.language,当前值为DE。我尝试用以下方式动态选择对应键值,但写法无法生效:
Next Step: Type: Pass Parameters: localizedHello.$: $.config[$.language].hello # 这里的写法不生效 ...
我已知一种可行但繁琐的方法:
It is German: Type: Pass Parameters: localizedConfig.$: $.config.DE ResultPath: $.selected Next: Next Step Next Step: Type: Pass Parameters: localizedHello.$: $.selected.localizedConfig.hello ...
且我以为AWS Step Functions不支持类似States.Get(States.Get($.config, $.language), 'hello')的嵌套内置函数调用,请问是否有比使用额外Pass步骤更优的方法?
方法1:使用嵌套的States.Get内置函数
当前AWS Step Functions的内置函数支持嵌套调用States.Get,可直接在单个Pass步骤中完成取值,无需额外中间步骤:
Next Step: Type: Pass Parameters: localizedHello.$: States.Get(States.Get($.config, $.language), 'hello') ...
方法2:使用States.Format构造JSONPath路径
如果你的Step Functions环境暂不支持嵌套States.Get,可以用States.Format拼接完整JSONPath,再通过States.JsonPath取值:
Next Step: Type: Pass Parameters: localizedHello.$: States.JsonPath(States.Format('$.config.{}.hello', $.language)) ...
方法3:使用新版ASL的动态键语法
在新版Amazon States Language(ASL)中,已支持直接使用方括号的动态键引用,修正语法后即可直接生效:
Next Step: Type: Pass Parameters: localizedHello.$: "$.config[$.language].hello" ...
内容的提问来源于stack exchange,提问作者Alex Jäger
相关产品推荐
相关产品推荐

