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

如何在Mule DataWeave 2中按rank值升序排序JSON数据

需求:按rank值升序排序JSON中的offers数组

需要将下述JSON数据中的offers数组按照rank值从低到高进行升序排序,请求提供对应的DataWeave 2脚本。

实际Payload

{"content": {"status": "success","mistatus": false,"offers": [{"id": "300","name": "Internet 300","offerings": [{"id": "1122334455","name": "Internet 300","bundledProductOfferingOption": [{"Default": 1,"count": 1}]}],"productOfferingCharacteristic": [{"name": "rank","locdName": "rank","valueType": "String","value": [{"value": "3"}]}]},{"id": "10","name": "Internet 10","offerings": [{"id": "567890","name": "Internet 10","bundledProductOfferingOption": [{"Default": 1,"count": 1}]}],"productOfferingCharacteristic": [{"name": "rank","locdName": "rank","valueType": "String","value": [{"value": "1"}]}]},{"id": "200","name": "Internet 200","offerings": [{"id": "789078","name": "Internet 200","bundledProductOfferingOption": [{"Default": 1,"count": 1}]}],"productOfferingCharacteristic": [{"name": "rank","locdName": "rank","valueType": "String","value": [{"value": "2"}]}]}]}}

期望Payload

{"content": {"status": "success","mistatus": false,"offers": [{"id": "10","name": "Internet 10","offerings": [{"id": "567890","name": "Internet 10","bundledProductOfferingOption": [{"Default": 1,"count": 1}]}],"productOfferingCharacteristic": [{"name": "rank","locdName": "rank","valueType": "String","value": [{"value": "1"}]}]},{"id": "200","name": "Internet 200","offerings": [{"id": "789078","name": "Internet 200","bundledProductOfferingOption": [{"Default": 1,"count": 1}]}],"productOfferingCharacteristic": [{"name": "rank","locdName": "rank","valueType": "String","value": [{"value": "2"}]}]},{"id": "300","name": "Internet 300","offerings": [{"id": "1122334455","name": "Internet 300","bundledProductOfferingOption": [{"Default": 1,"count": 1}]}],"productOfferingCharacteristic": [{"name": "rank","locdName": "rank","valueType": "String","value": [{"value": "3"}]}]}]}}

DataWeave 2脚本

%dw 2.0
output application/json
---
content: payload.content update {
    case offers at .offers -> 
        offers orderBy ((offer) -> 
            (offer.productOfferingCharacteristic filter ($.name == "rank"))[0].value[0].value as Number
        )
}

脚本说明

  • 使用update操作符精准修改payload.content下的offers字段
  • 通过orderBy实现排序:
    1. 用filter从productOfferingCharacteristic数组中筛选出名称为"rank"的特征对象
    2. 提取该对象的rank值并转为Number类型,确保按数值大小升序排列(避免字符串排序的异常)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:26