如何在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实现排序:- 用
filter从productOfferingCharacteristic数组中筛选出名称为"rank"的特征对象 - 提取该对象的rank值并转为
Number类型,确保按数值大小升序排列(避免字符串排序的异常)
- 用
内容的提问来源于stack exchange,提问作者Krish
相关产品推荐
相关产品推荐

