如何在Python中按指定key值排序复杂JSON(优先x11算法)
实现按
algo字段排序(x11优先)的方案 放心,这个需求超容易实现的!你已经掌握基础排序方法,只是这个JSON里的data是键值对对象(不是数组),所以只需要多一步“对象转数组”的操作,排序后再转回结构就搞定了。
核心思路
- 把
data对象转换成可排序的数组(因为对象本身不能直接排序) - 用排序规则把所有
algo为x11的项排在最前面 - 把排序后的数组转回对象,放回原JSON结构
具体实现示例
JavaScript版本(适合前端/Node.js环境)
// 假设你已经把JSON解析成了jsonData变量 const originalData = jsonData.data; // 将对象转为[key, value]格式的数组 const dataArray = Object.entries(originalData); // 排序:x11优先,其他项保持原相对顺序 dataArray.sort((a, b) => { const isX11A = a[1].info.algo === 'x11'; const isX11B = b[1].info.algo === 'x11'; if (isX11A && !isX11B) return -1; // a是x11,排前面 if (!isX11A && isX11B) return 1; // b是x11,排前面 return 0; // 都不是x11,保持原顺序 }); // 把排序后的数组转回对象 const sortedData = Object.fromEntries(dataArray); // 更新原JSON的data字段 jsonData.data = sortedData; // 输出格式化后的结果 console.log(JSON.stringify(jsonData, null, 2));
Python版本(适合后端/数据处理场景)
import json # 假设你的JSON字符串存储在json_str中 json_data = json.loads(json_str) original_data = json_data['data'] # 将字典转为[(key, value)]格式的列表 data_list = list(original_data.items()) # 排序:x11项的排序权重设为0,其他为1,这样x11会排在最前面 data_list.sort(key=lambda item: 0 if item[1]['info']['algo'] == 'x11' else 1) # 转回字典(Python 3.7+字典默认保留插入顺序) sorted_data = dict(data_list) # 更新原数据并输出 json_data['data'] = sorted_data print(json.dumps(json_data, indent=2))
补充说明
- 如果你的运行环境不支持
Object.fromEntries(比如旧版浏览器),可以用reduce手动构建对象:const sortedData = dataArray.reduce((acc, [key, value]) => { acc[key] = value; return acc; }, {}); - Python 3.6及以下版本的字典不保留插入顺序,这时可以用
collections.OrderedDict来替代普通字典:from collections import OrderedDict sorted_data = OrderedDict(data_list)
这个逻辑完全基于你已经掌握的基础排序知识,只是多了对象和数组之间的转换步骤,上手非常快!
内容的提问来源于stack exchange,提问作者Linus TechTips
相关产品推荐
相关产品推荐

