You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Step Functions中转换ListObjectsV2结果为指定Key结构数组?

问题

我有AWS Step Functions中ListObjectsV2任务的输出结果:

{
  "Contents": [
    {
      "ETag": "\"86c12c034bc6c30cb89b500b954c188f\"",
      "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_1.csv",
      "LastModified": "2023-02-09T13:46:20Z",
      "Size": 796014,
      "StorageClass": "STANDARD"
    },
    {
      "ETag": "\"58e4a770e0f66073b00d185df500f07f\"",
      "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_2.csv",
      "LastModified": "2023-02-09T13:47:20Z",
      "Size": 934038,
      "StorageClass": "STANDARD"
    },
    {
      "ETag": "\"460abd0de64d5cb67e8f0d46878cb1ef\"",
      "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_3.csv",
      "LastModified": "2023-02-09T13:46:57Z",
      "Size": 794264,
      "StorageClass": "STANDARD"
    },
    {
      "ETag": "\"1bfedc3dc92e4ba8d04e24b9b5a0ed58\"",
      "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_4.csv",
      "LastModified": "2023-02-09T13:46:24Z",
      "Size": 788756,
      "StorageClass": "STANDARD"
    },
    {
      "ETag": "\"9d6c434ce5ebdf203a790fbcf19338dc\"",
      "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_5.csv",
      "LastModified": "2023-02-09T13:47:07Z",
      "Size": 831156,
      "StorageClass": "STANDARD"
    }
  ],
  "IsTruncated": false,
  "KeyCount": 5,
  "MaxKeys": 1000,
  "Name": "vita-internal-text-classification-dev-183576513728",
  "Prefix": "55271f52fffe4461a2ee3228ebb97157"
}

我需要把处理后的结果传递到下一个状态,要求格式为每个元素包含Key字段的数组:

[
    {
        "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_1.csv"
    },
    {
        "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_2.csv"
    },
    {
        "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_3.csv"
    },
    {
        "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_4.csv"
    },
    {
        "Key": "55271f52fffe4461a2ee3228ebb97157/input/batch_5.csv"
    }
]

之前尝试用ResultPath设置为$.Contents[*].Key或$.Contents[*].['Key'],得到的结果是字符串数组,不符合需求:

[
    "55271f52fffe4461a2ee3228ebb97157/input/batch_1.csv",
    "55271f52fffe4461a2ee3228ebb97157/input/batch_2.csv",
    "55271f52fffe4461a2ee3228ebb97157/input/batch_3.csv",
    "55271f52fffe4461a2ee3228ebb97157/input/batch_4.csv",
    "55271f52fffe4461a2ee3228ebb97157/input/batch_5.csv"
]
解决方案

可以用AWS Step Functions的内置JSONPath转换语法来实现需求,两种方法任选:

方法1:用Pass状态构造目标格式

在ListObjectsV2任务后面添加一个Pass状态,通过Parameters字段遍历原数组,生成每个带Key字段的对象:

{
  "Type": "Pass",
  "Parameters": {
    "Keys.$": "$.Contents[*].{Key: Key}"
  },
  "ResultPath": "$.ProcessedKeys",
  "Next": "YourNextState"
}

这里的$.Contents[*].{Key: Key}是Step Functions支持的转换写法,会自动遍历Contents数组,为每个元素生成只包含Key字段的对象,最终得到你需要的数组格式。

方法2:用Map状态(适合后续批量处理场景)

要是之后还要批量处理每个Key对象,直接用Map状态更方便。指定ItemsPath为$.Contents,然后在迭代器里只传递Key字段:

{
  "Type": "Map",
  "ItemsPath": "$.Contents",
  "Parameters": {
    "Key.$": "$$.Map.Item.Value.Key"
  },
  "Iterator": {
    "StartAt": "YourBatchTask",
    "States": {
      "YourBatchTask": {
        "Type": "Task",
        "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:YourFunction",
        "End": true
      }
    }
  },
  "Next": "AfterMapState"
}

这样每个迭代任务收到的参数就是{Key: "..."}的格式,无需额外处理。

结果验证

用方法1的话,$.ProcessedKeys字段里就是你需要的目标数组,直接传给下一个状态即可。

内容的提问来源于stack exchange,提问作者Or Shemtov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:01:12