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

Mule 4 DataWeave 2如何递归排序多层嵌套JSON对象

使用DataWeave递归排序多层嵌套JSON对象的所有键

问题描述

需要对包含任意层级嵌套对象的非数组JSON对象,递归排序所有层级的键。输入示例如下:

{
"Memo": {
    "itemAmount1": "5",
    "taxName1": "TAX",
    "productPrice1": "10",
    "accountName1": "Account Receivable (Debtors)"
},
"Footer": {
    "productDescription2": "Maggie",
    "itemQuantity2": "49.5",
    "accountName2": "Account Receivable (Debtors)",
    "taxName2": "TAX"
},
"Header": {
    "itemDiscount3": "10",
    "accountName3": "Account Receivable (Debtors)",
    "productPrice3": "10",
    "taxName3": "TAX"
}
}

预期输出需同时排序所有嵌套层级的键:

{
"Footer": {
    "accountName2": "Account Receivable (Debtors)",
    "itemQuantity2": "49.5",
    "productDescription2": "Maggie",
    "taxName2": "TAX"
},
"Header": {
    "accountName3": "Account Receivable (Debtors)",
    "itemDiscount3": "10",
    "productPrice3": "10",
    "taxName3": "TAX"
},
"Memo": {
    "accountName1": "Account Receivable (Debtors)",
    "itemAmount1": "5",
    "productPrice1": "10",
    "taxName1": "TAX"
}
}

解决方案

以下是实现递归排序的DataWeave 2.0代码:

%dw 2.0
output application/json
fun sortObjectKeys(obj: Object): Object = 
    obj 
        pluck ((value, key) -> { (key): if (value is Object) sortObjectKeys(value) else value })
        orderBy ((item) -> keysOf(item)[0])
---
sortObjectKeys(payload)

代码解释

  1. 递归函数定义:sortObjectKeys函数接收一个Object类型参数,专门处理单个对象的键排序逻辑。
  2. 遍历与嵌套处理:用pluck遍历输入对象的所有键值对,对每个值做判断:如果值是Object类型,就递归调用sortObjectKeys处理嵌套对象;非对象类型则直接保留原值。
  3. 按键排序:通过orderBy操作,以每个键值对的键(keysOf(item)[0])为依据做字母顺序排序,确保所有层级的键都按规则排列。
  4. 执行处理:最后调用sortObjectKeys(payload)对输入的JSON payload执行完整的排序操作。

该实现支持任意深度的嵌套对象,无论层级多少,都会递归完成所有键的排序。

内容的提问来源于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.24 19:23:12