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

AWS Step Functions执行任务时自动移除JSON空值的解决方法咨询

解决AWS Step Functions自动移除JSON空值的问题

问题背景

使用Step Functions的arn:aws:states:::apigateway:invoke任务调用API Gateway转发请求时,输入JSON中的null值会被静默移除。例如定义的RequestBody包含birthDate.$": "$.dateOfBirth,当输入的dateOfBirth为null时,微服务收到的请求会丢失该字段,但Step Functions控制台显示的任务输入仍保留null值,全程无任何提示。

解决办法

方法1:通过States.Format+States.StringToJson强制保留null

修改Task的Parameters配置,利用字符串格式化构造包含null的JSON字符串,再转换为JSON对象,绕过Step Functions的null值修剪逻辑:

"Parameters": {
    "ApiEndpoint":"somename.execute-api.eu-west-1.amazonaws.com",
    "Method":"POST",
    "Stage":"Prod",
    "Path":"${microservice-path}",
    "RequestBody.$": "States.StringToJson(States.Format('{{\"firstName\": {}, \"lastName\": {}, \"email\": {}, \"birthDate\": {}}}', $.firstName, $.lastName, $.email, $.dateOfBirth))"
}

原理:States.Format会将null值直接嵌入字符串,生成包含"birthDate": null的JSON字符串,再通过States.StringToJson转换为JSON对象,此时Step Functions不会剔除该字段。

方法2:引入Lambda中间层转发请求

创建简单Lambda函数,接收Step Functions输入后完整转发给API Gateway(Lambda不会自动移除null值),再在Step Functions中调用该Lambda替代直接调用API Gateway:

  1. Lambda示例代码(Python):
import requests
import os

def lambda_handler(event, context):
    api_endpoint = os.environ['API_ENDPOINT']
    stage = os.environ['STAGE']
    path = os.environ['PATH']
    url = f"https://{api_endpoint}/{stage}/{path}"
    response = requests.post(url, json=event)
    return {
        'statusCode': response.status_code,
        'body': response.json()
    }
  1. 修改Step Functions的Task Resource为Lambda的ARN,Parameters传递所需输入参数即可。

方法3:用Pass状态预处理输入

在调用API Gateway的Task前添加Pass状态,通过ResultSelector构造包含null值的完整对象,再传递给后续Task:

"Preprocess Input": {
    "Type": "Pass",
    "ResultSelector": {
        "firstName.$": "$.firstName",
        "lastName.$": "$.lastName",
        "email.$": "$.email",
        "birthDate.$": "States.If(IsNull($.dateOfBirth), null, $.dateOfBirth)"
    },
    "ResultPath": "$.requestBody",
    "Next": "Pass to Microservice"
}

后续Task的RequestBody引用预处理后的对象:

"RequestBody.$": "$.requestBody"

原理:Pass状态不会自动移除null字段,通过States.If可动态处理字段为有效值或null的场景。

内容的提问来源于stack exchange,提问作者anuj pradhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:13:27