DataWeave 2 update函数未按预期生效,无法更新payload的price字段
问题原因分析
- 输出仅为部分payload的原因:你的脚本直接定位到了
payload.IntegrationEntities.integrationEntity.integrationEntityDetails.contractUtilization.items.item节点进行操作,输出自然只返回该节点的处理结果,不会保留上层的完整payload结构。要返回全量payload,需要从根节点开始逐层做更新操作,而不是只选中子节点处理。 - price字段未更新的原因:
item是数组类型,你当前的update语句没有遍历数组内的每个item对象,匹配规则无法命中到每个item下的price字段,因此不会触发更新。
正确的DataWeave 2脚本
%dw 2.0 output application/json --- payload update { // 遍历integrationEntity数组 case entity at .IntegrationEntities.integrationEntity -> entity map (itemEntity) -> itemEntity update { // 匹配到items下的item数组 case itemArr at .integrationEntityDetails.contractUtilization.items.item -> itemArr map (singleItem) -> singleItem update { // 更新每个item对象的price字段 case .price -> "100" } } }
脚本说明
- 从根节点
payload开始做update操作,所有上层结构都会完整保留,最终输出全量payload - 对数组类型的节点(
integrationEntity、item)先做map遍历,逐个处理数组内的对象 - 最终命中每个item对象下的
price字段,完成值的批量更新
内容的提问来源于stack exchange,提问作者Ratha
相关产品推荐
相关产品推荐

