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

Mule4中如何对日期格式键的对象实现反向排序?

如何在DataWeave中对日期键的对象进行降序排序?

问题描述

现有如下DataWeave脚本,目标是对以ISO格式日期为键的对象进行降序排序,但当前使用test orderBy $$只能得到升序结果,尝试过-$$、[-1 to 0]以及转换为LocalDateTime的方式均未成功:

%dw 2.0
output application/json
var test = { 
    "2022-10-19T10:59:00.000Z":[{"kio":"spotage"}],
    "2022-10-17T10:59:00.000Z": [{"kio":"spotage"}],
    "2022-10-18T10:59:00.000Z": [{"kio":"spotage"}] 
}
---
test orderBy $$

期望得到的降序结果:

{
    "2022-10-19T10:59:00.000Z": [
        {
            "kio": "spotage"
        }
    ],
    "2022-10-18T10:59:00.000Z": [
        {
            "kio": "spotage"
        }
    ],
    "2022-10-17T10:59:00.000Z": [
        {
            "kio": "spotage"
        }
    ]
}

解决方案

方法1:日期转换+负号实现降序

核心是先将字符串类型的键转换为DateTime类型(原日期带时区标识Z,不能用LocalDateTime),再通过取负值实现降序排序:

%dw 2.0
output application/json
var test = { 
    "2022-10-19T10:59:00.000Z":[{"kio":"spotage"}],
    "2022-10-17T10:59:00.000Z": [{"kio":"spotage"}],
    "2022-10-18T10:59:00.000Z": [{"kio":"spotage"}] 
}
---
test orderBy -(($$ as DateTime))

方法2:使用orderByDesc(DataWeave 2.4+ / Mule 4.4+ 可用)

如果运行环境支持DataWeave 2.4或更高版本,可直接用orderByDesc函数,写法更直观:

%dw 2.0
output application/json
var test = { 
    "2022-10-19T10:59:00.000Z":[{"kio":"spotage"}],
    "2022-10-17T10:59:00.000Z": [{"kio":"spotage"}],
    "2022-10-18T10:59:00.000Z": [{"kio":"spotage"}] 
}
---
test orderByDesc ($$ as DateTime)

关键说明

  • 之前尝试-$$失败是因为$$是字符串类型,负号对字符串排序无效,必须先转换为日期类型。
  • 不能用LocalDateTime转换带时区的日期,会导致转换错误或排序逻辑异常,应使用DateTime类型适配带时区的ISO日期格式。

内容的提问来源于stack exchange,提问作者Star

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:05:24