如何在Mule中用DataWeave基于总数和拆分数量生成指定数组
DataWeave实现按指定大小拆分数值区间数组
核心实现代码
假设你的参数totalCount和splitNumber是动态输入(比如来自payload、变量或属性),可以用以下DataWeave 2.0代码生成目标数组:
%dw 2.0 output application/json var totalCount = 1000 // 可替换为动态参数,比如 payload.totalCount 或 vars.totalCount var splitNumber = 100 // 可替换为动态参数,比如 payload.splitNumber 或 vars.splitNumber var totalGroups = ceil(totalCount / splitNumber) --- (1 to totalGroups) map (groupIndex) -> { start: (groupIndex - 1) * splitNumber + 1, end: min(groupIndex * splitNumber, totalCount) }
代码解释
- 计算总组数:用
ceil(totalCount / splitNumber)确保即使totalCount不是splitNumber的整数倍,也能生成最后一组(比如totalCount=1050、splitNumber=100时,会生成11组,最后一组start:1001, end:1050) - 生成区间对象:遍历1到总组数的范围,对每个组索引:
start:上一组结束值+1,公式为(groupIndex - 1) * splitNumber + 1end:当前组的结束值,用min()处理最后一组可能不足splitNumber的情况,确保不超过totalCount
示例输出(当totalCount=1000、splitNumber=100时)
[ {"start":1,"end":100}, {"start":101,"end":200}, {"start":201,"end":300}, {"start":301,"end":400}, {"start":401,"end":500}, {"start":501,"end":600}, {"start":601,"end":700}, {"start":701,"end":800}, {"start":801,"end":900}, {"start":901,"end":1000} ]
动态参数替换
如果参数来自Mule的消息属性或变量,只需替换var定义部分:
var totalCount = attributes.queryParams.totalCount as Number var splitNumber = vars.splitSize as Number
内容的提问来源于stack exchange,提问作者Upendra Singh
相关产品推荐
相关产品推荐

