如何在AWS Step Functions中优雅地向JSON路径追加多字段
在AWS Step Functions Pass状态中追加字段到现有对象
你遇到的问题是因为当前配置里,Parameters生成了仅包含新字段的对象,再通过ResultPath: "$.event"直接替换了原有的$.event对象,导致原有内容被覆盖。要实现追加字段并保留原有内容,可以用以下两种方法:
方法一:在Parameters中合并原有对象与新字段
直接在Parameters里先引入整个原有$.event对象,再添加新字段。Step Functions会自动合并这些键值对(新字段与原有字段重名时,新字段会覆盖原有字段):
"PrepareMessageState": { "Type": "Pass", "Parameters": { "$.$": "$.event", // 引入原有event的所有字段 "transformId.$": "$.event.eventId", "taskRunState.$": "$.taskResult.JobRunState", "taskRunId.$": "$.taskResult.Id" }, "ResultPath": "$.event", "Next": "PublishMessageTask" }
方法二:使用States.JsonMerge内置函数
如果原有$.event字段较多,不想逐个列举,可以用Step Functions的States.JsonMerge函数合并原有对象和新字段集合:
"PrepareMessageState": { "Type": "Pass", "Parameters": { "newFields": { "transformId.$": "$.event.eventId", "taskRunState.$": "$.taskResult.JobRunState", "taskRunId.$": "$.taskResult.Id" } }, "ResultSelector": { // 第三个参数false表示不覆盖原有字段,设为true则会覆盖同名字段 "mergedEvent.$": "States.JsonMerge($.event, $.newFields, false)" }, "ResultPath": "$.event", "Next": "PublishMessageTask" }
两种方法都能实现保留$.event原有内容并追加新字段的需求:方法一适合字段少、需要明确控制字段的场景;方法二更适合原有字段数量多的场景。
内容的提问来源于stack exchange,提问作者Paul Eaten
相关产品推荐
相关产品推荐

