You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:47:40