41 lines
975 B
Go
41 lines
975 B
Go
package utils
|
||
|
||
import "sort"
|
||
|
||
// SortMapParams 对map的key进行排序,包括多层嵌套的情况
|
||
func SortMapParams(data map[string]interface{}) map[string]interface{} {
|
||
sortedMap := make(map[string]interface{})
|
||
keys := make([]string, 0, len(data))
|
||
|
||
// 收集所有的key
|
||
for key := range data {
|
||
keys = append(keys, key)
|
||
}
|
||
|
||
// 对key进行排序
|
||
sort.Strings(keys)
|
||
|
||
// 通过排序后的key插入新map中
|
||
for _, key := range keys {
|
||
value := data[key]
|
||
switch valueTyped := value.(type) {
|
||
case map[string]interface{}:
|
||
// 如果是嵌套的map,递归调用
|
||
sortedMap[key] = SortMapParams(valueTyped)
|
||
case []interface{}:
|
||
// 如果是嵌套的slice,对其中的map进行递归调用
|
||
for i, v := range valueTyped {
|
||
if vMap, ok := v.(map[string]interface{}); ok {
|
||
valueTyped[i] = SortMapParams(vMap)
|
||
}
|
||
}
|
||
sortedMap[key] = valueTyped
|
||
default:
|
||
// 否则直接插入
|
||
sortedMap[key] = value
|
||
}
|
||
}
|
||
|
||
return sortedMap
|
||
}
|