如何在AWS CDK Step Function栈中为JSON对象添加静态值
问题:为Magento请求的Product对象添加status字段
需要在现有JSON的magento_request.product节点下添加键值对status: 0:
现有JSON结构:
{ "referring_website": "https://example.com", "magento_request": { "product": { "price": 125 } } }
期望得到的JSON结果:
{ "referring_website": "https://example.com", "magento_request": { "product": { "price": 125, "status": 0 } } }
用户尝试的AWS CDK代码存在问题,无法正确实现需求:
this.createProduct = new SqsSendMessage(this, "Create Product ", { messageBody: TaskInput.fromObject({ "data": { ...JsonPath.stringAt("$.magento_request.product"), "status": 0 } }), ... });
解决方案
问题根源
代码中使用了JsonPath.stringAt(),该方法会将目标对象序列化为JSON字符串,而非保留对象结构,导致扩展运算符无法正确合并键值对。
正确实现方式
方法一:使用JsonPath.objectAt()配合扩展运算符
this.createProduct = new SqsSendMessage(this, "Create Product", { messageBody: TaskInput.fromObject({ "data": { ...JsonPath.objectAt("$.magento_request.product"), "status": 0 } }), // 补充其他配置项 });
JsonPath.objectAt()会直接获取指定路径的原始对象,通过扩展运算符将原product的键值对与新的status: 0合并,得到符合要求的对象。
方法二:使用JsonPath.merge()合并对象
this.createProduct = new SqsSendMessage(this, "Create Product", { messageBody: TaskInput.fromObject({ "data": JsonPath.merge( JsonPath.objectAt("$.magento_request.product"), { "status": 0 } ) }), // 补充其他配置项 });
JsonPath.merge()会自动将两个对象合并,把第二个对象的键值对添加到第一个对象中,实现字段追加的效果。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

