使用DataWeave排序嵌套数组失效问题排查
DataWeave 2.0嵌套数组排序失效问题排查与修复
你的嵌套数组排序失效有两个核心问题:
1. Update语法中的路径错误
在update块里,你写的case .item.products是错误的——当前上下文已经是map迭代的item对象,直接用.products就能定位到要更新的数组,错误路径会导致根本没修改原数据。
2. 字段名称不统一导致排序逻辑失效
第二个products数组里的产品标识字段是product_ref,不是product,你统一用$.product会返回null,indexOf(sortOrder, null)会返回-1,所有元素的排序权重一致,自然不会触发排序。需要兼容两种字段名。
修正后的代码
%dw 2.0 output application/json import indexOf from dw::core::Arrays var sortOrder=["P_A", "P_B"] var myInput=[ { "command": "AZ59696", "products": [ { "product": "P_B", "price": 12 }, { "product": "P_A", "price": 21 } ] }, { "command": "BA23122", "products": [ { "product_ref": "P_A", "price": 21 }, { "product_ref": "P_B", "price": 12 } ] } ] --- myInput map ((item, index) -> item update { case .products -> item.products orderBy( indexOf(sortOrder, $.product default $.product_ref) ) })
代码说明
- 把
case .item.products改为case .products,正确定位到要更新的嵌套数组 - 用
$.product default $.product_ref兼容两种不同的字段名,确保能正确获取到产品标识去匹配sortOrder的索引
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

