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

AWS Step Functions:如何移除冗余节点获取纯值(CDK实现)

解决AWS Step Functions Pass状态赋值冗余嵌套问题

问题描述

使用AWS CDK(Java)构建Step Functions时,需求为:当info.valueMaybeNull存在且非空时,将其值直接赋值给request.data.newValue。但当前实现通过Pass状态生成了冗余的嵌套结构newValue.newName,不符合预期。

输入示例

{
    "info": {
        "firstname": "Nicolas",
        "valueMaybeNull": "Hola"
    },
    "request": {
        "data": {
            "currency": "EUR"
        }
    }
}

当前错误输出

{
    "info": {
        "firstname": "Nicolas",
        "valueMaybeNull": "Hola"
    },
    "request": {
        "data": {
            "currency": "EUR",
            "newValue": {
                "newName": "Hola"
            }
        }
    }
}

期望输出

{
    "info": {
        "firstname": "Nicolas",
        "valueMaybeNull": "Hola"
    },
    "request": {
        "data": {
            "currency": "EUR",
            "newValue": "Hola"
        }
    }
}

问题根源

当前代码中,Pass状态通过parameters创建了一个包含newName键的对象,再通过resultPath将该对象赋值给request.data.newValue,导致了嵌套结构:

  • parameters(Map.of("newName.$", "$.info.valueMaybeNull")) 生成{newName: "Hola"}对象
  • resultPath("$.request.data.newValue") 将这个对象赋值给newValue节点,最终形成newValue.newName的嵌套

修正方案

修改addValueState方法,让Pass状态直接返回info.valueMaybeNull的纯值,而非带键的对象,再赋值到目标节点:

var isValueEmptyStep = new Choice(scope, "Is value not empty?");

Chain verifyIfValueIsNullStep =
    isValueEmptyStep
    .when(
        Condition.and(
            Condition.isPresent("$.info.valueMaybeNull"),
            Condition.isNotNull("$.info.valueMaybeNull")),
        addValueState(scope))
    .otherwise(new Pass(scope, "Value is null, continue normally"))
    .afterwards();

return Chain.start(verifyIfValueIsNullStep);
}

public Pass addValueState(final Construct scope) {
    return Pass.Builder.create(scope, "Add value to request data")
        // 直接返回info.valueMaybeNull的纯值,而非带键对象
        .parameters(Map.of("$.", "$.info.valueMaybeNull"))
        // 将纯值直接赋值到目标节点
        .resultPath("$.request.data.newValue")
        .build();
}

关键修改点

  • 将parameters中的映射从"newName.$"改为"$.": "$.info.valueMaybeNull":"$."表示直接返回指定路径的原始值,而非包装成键值对对象
  • 确保resultPath指向正确的目标节点$.request.data.newValue,让纯值直接覆盖/写入该节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:35