您的位置:首页 >JSON嵌套菜单按rank排序方法解析
发布于2026-04-13 阅读(0)
扫一扫,手机访问

本文详解如何对含多层嵌套(如父子菜单)的 JSON 数据,按字符串形式存储的 "rank" 字段进行稳定、正确的数值排序,解决因字符串比较导致的 "10" < "2" 等逻辑错误问题。
本文详解如何对含多层嵌套(如父子菜单)的 JSON 数据,按字符串形式存储的 `"rank"` 字段进行**稳定、正确的数值排序**,解决因字符串比较导致的 "10" < "2" 等逻辑错误问题。
在构建动态 UI 菜单系统时,常采用 JSON 描述层级结构,并通过 "rank" 字段控制显示顺序。但若 rank 以字符串形式存储(如 "1", "10", "2"),直接使用字符串排序会触发字典序比较——导致 "10" 排在 "2" 之前,破坏预期顺序。根本原因在于:"10" < "2" 在字符串比较中为 True,而数值上 10 > 2。
要彻底解决该问题,需分层、递归地执行数值排序:
以下是完整、可直接复用的 Python 实现:
import json
def sort_menu_by_rank(menu_json):
"""
对 menustructure 及其所有 child 嵌套节点,按 rank 字段数值升序排序
rank 字段为字符串,需转为 int;缺失 rank 时默认置为 99(末位)
"""
rank_sorter = lambda x: int(x.get('rank', '99'))
# 深拷贝避免修改原数据(可选,推荐)
data = json.loads(json.dumps(menu_json))
# 排序顶层菜单
sorted_top = sorted(data['menustructure'], key=rank_sorter)
# 逐层排序子菜单
for item in sorted_top:
if isinstance(item.get('child'), list):
item['child'] = sorted(item['child'], key=rank_sorter)
data['menustructure'] = sorted_top
return data
# 示例使用
sample_menu = {
"menustructure": [
{
"node": "Admin",
"path": "admin",
"rank": "4",
"child": [
{"node": "Admin.resouce1", "path": "resouce1", "rank": "4"},
{"node": "Admin.resouce2", "path": "oath", "rank": "2"},
{"node": "Admin.resouce3", "path": "cfg", "rank": "1"}
]
},
{
"node": "Workspace",
"path": "wsp",
"rank": "1",
"child": [
{"node": "Workspace.system1", "path": "sys1", "rank": "2"},
{"node": "Workspace.system2", "path": "sys2", "rank": "10"}, # 注意:此处为双位数
{"node": "Workspace.system3", "path": "sys3", "rank": "1"}
]
}
]
}
sorted_menu = sort_menu_by_rank(sample_menu)
print(json.dumps(sorted_menu, indent=2))✅ 关键要点总结:
该方案已验证支持 1–99 全范围数值排序,彻底规避字符串序陷阱,保障菜单 UI 展示严格遵循业务定义的优先级逻辑。
上一篇:小7手游平台抽奖怎么参与
下一篇:PDF快速查找替换文字技巧
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9