在AWS Step Function的Map State中将String解析为JSON

3yhwsihp  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(191)

我在AWS Step Function的Map状态中解析“字符串化JSON”时遇到了一个问题。我的状态机首先调用一个返回JSON对象的Lambda函数。输出如下所示:

{
"requests": "{\"Data\":[{\"ID\":\"10001\",\"GroupID\":\"9999\"},{\"ID\":\"10002\",\"GroupID\":\"9999\"}]}"
}

字符串
当我通过一个端点调用这个lambda时,它返回一个普通的JSON。然而,当它出现在Step Function的编辑模式下的输出窗口中时,它是一个字符串。然后,我的下一步将是遍历数组。我必须通过关键字“Data”进行过滤,然后就有了数组。但是为了将其作为下一部分的输入传递,(这是一个Map状态),我必须能够给予一个数组。
如果您对在AWS Step Functions范围内处理这种情况有任何建议或见解,我们将不胜感激。

dhxwm5r4

dhxwm5r41#

您可以使用intrinsic函数将请求输出转换为JSON,使用States.StringToJson函数,并使用OutputPath过滤器将Data字段传递给map状态。
https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html#asl-intrsc-func-json-manipulate
类似于以下步骤(参见String To Json步骤)。
String To Json步骤的输入是{"input": "{\"Data\":[1,2,3,4]}"},输出是[1,2,3,4]

{
  "Comment": "A description of my state machine",
  "StartAt": "Json To String",
  "States": {
    "Json To String": {
      "Type": "Pass",
      "Next": "String To Json",
      "Parameters": {
        "input.$": "States.JsonToString($.input)"
      }
    },
    "String To Json": {
      "Type": "Pass",
      "Next": "Map",
      "Parameters": {
        "input.$": "States.StringToJson($.input)"
      },
      "OutputPath": "$.input.Data"
    },
    "Map": {
      "Type": "Map",
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "INLINE"
        },
        "StartAt": "Pass (1)",
        "States": {
          "Pass (1)": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true
    }
  }
}

字符串
在下面的示例输入中,这使用Map将1、2、3、4传递到“通过”状态。

{
"input": { "Data": [1,2,3,4] }
}

相关问题