如何在Mule 4 Dataweave中对json数据进行排序

问题描述 投票:0回答:1

我需要对可以包含数组和对象的 JSON 数据进行排序 样本数据:

    {
    "results": [
        {
            "empCode": "abcd",
            "age": 33,
            "awards": [
                {
                    "year": 2024,
                    "status": [
                        "X1",
                        "FA",
                        "VE"
                    ]
                }
            ]
            
        },
        {
            "empCode": "abcd",
            "age": 33,
            "awards": [
                {
                    "year": 2024,
                    "status": [
                        "X1",
                        "FA",
                        "VE"
                    ]
                }
            ]
            
        }    
    ]
}

使用这个脚本我可以排序:

%dw 2.0
output application/json
  fun sortObjects(x)=
    x match {
        case o is Object -> o 
                              orderBy ((value, key) -> key)
                              mapObject (($$): sortObjects($))
        case a is Array -> a map ((item, index) -> item match { 
                              case abc1 is Object -> abc1 
                                                     orderBy ((value, key) -> key)
                                                     mapObject (($$): sortObjects($))
                              else -> $ 

                            } 
                              )
        else -> $ 
  }  
---
sortObjects(payload)

所以这是基于

keys
进行排序,这很好 不过,我也想按升序对字符串数组
status
进行排序。 目前它显示为:

 "status": [
      "X1",
      "FA",
      "VE"
    ],

我希望它显示为:

 "status": [
      "FA",
      "VE",
      "X1"
    ],

我如何实现这一目标?

mule dataweave mule4
1个回答
0
投票

您只需要在脚本中做一些小的修改。基本上,如果数组不是对象数组,则根本不会对数组进行排序。 此外,当数组是对象数组时,您可以递归调用相同的函数,因为您已经具有对在同一函数中编写的对象进行排序的逻辑。

case a is Array -> if(a[0] is Object) a map sortObjects($) 
                   else (a orderBy $)
© www.soinside.com 2019 - 2024. All rights reserved.