我需要对可以包含数组和对象的 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"
],
我如何实现这一目标?
您只需要在脚本中做一些小的修改。基本上,如果数组不是对象数组,则根本不会对数组进行排序。 此外,当数组是对象数组时,您可以递归调用相同的函数,因为您已经具有对在同一函数中编写的对象进行排序的逻辑。
case a is Array -> if(a[0] is Object) a map sortObjects($)
else (a orderBy $)