如何在Mule 4 DataWeave中排序含字符串数组的JSON数据
Mule 4 DataWeave 脚本修改方案:同时排序对象Key与字符串数组
问题分析
现有脚本仅实现了对象Key的排序,但未处理字符串数组的元素排序。需要通过递归遍历数据结构,同时处理对象排序与字符串数组排序的需求。
修改后的完整脚本
%dw 2.0 output application/json // 递归处理数据结构:排序对象Key + 字符串数组元素 fun sortStructure(data: Any): Any = data match { // 处理对象:按Key升序排序,递归处理每个属性值 case obj is Object -> obj orderBy ((value, key) -> key) mapObject ((value, key) -> (key): sortStructure(value)) // 处理纯字符串数组:按元素升序排序 case arr is Array if arr every (item is String) -> arr orderBy ($) // 其他类型(非字符串数组、基本类型、混合数组等)直接返回 else -> data } --- sortStructure(payload)
关键逻辑说明
- 递归函数
sortStructure:遍历输入数据的所有节点,针对不同数据类型做差异化处理 - 对象排序:使用
orderBy((value, key) -> key)对对象的Key进行升序排列,同时递归处理每个属性值,确保嵌套对象/数组也被正确排序 - 字符串数组排序:通过
arr every (item is String)判断是否为纯字符串数组,再用orderBy($)对数组元素进行升序排列 - 兼容其他类型:非字符串数组、数字、布尔值等类型保持原始值不变,避免破坏原有数据
示例验证
输入数据:
{
"status": ["X1","FA","VE"],
"user": {
"name": "Alice",
"age": 30,
"tags": ["Z","A","M"]
},
"id": 1001
}
输出结果:
{
"id": 1001,
"status": ["FA","VE","X1"],
"user": {
"age": 30,
"name": "Alice",
"tags": ["A","M","Z"]
}
}
内容的提问来源于stack exchange,提问作者GettingStarted With123
相关产品推荐
相关产品推荐

