Python中按key1降序排序JSON内Baseball球员并输出字符串的问题
解决Python中JSON对象内指定字段按key降序排序且保留原格式的问题
我来帮你搞定这个需求!你需要保持JSON的对象结构完全不变,只是把Baseball对应的子对象里的球员按key1字段降序排列,对吧?下面是具体的实现步骤和代码示例:
核心思路
- 解析JSON字符串为Python字典,方便修改内部结构
- 提取Baseball下的球员键值对,按每个球员的
key1值进行降序排序 - 将排序后的键值对重新组织成有序字典(兼容新旧Python版本),替换原字典中的Baseball部分
- 再将修改后的字典转回JSON字符串,确保格式和原结构一致
代码实现
假设你从数据源获取的JSON字符串是这样的(球员顺序混乱):
{ "Sport": "Outdoor", "Baseball": { "Tom": {"key1": 3, "age": 28}, "Jerry": {"key1": 7, "age": 25}, "Alice": {"key1": 5, "age": 30} } }
对应的Python处理代码:
import json from collections import OrderedDict # 模拟从数据源获取的JSON字符串 input_json = ''' { "Sport": "Outdoor", "Baseball": { "Tom": {"key1": 3, "age": 28}, "Jerry": {"key1": 7, "age": 25}, "Alice": {"key1": 5, "age": 30} } } ''' # 1. 解析JSON为Python字典 data_dict = json.loads(input_json) # 2. 对Baseball下的球员按key1降序排序 # sorted()返回排序后的(key, value)元组列表,lambda指定排序依据为key1的值 sorted_players = sorted( data_dict['Baseball'].items(), key=lambda item: item[1]['key1'], reverse=True ) # 3. 替换原Baseball内容为排序后的有序字典 # 若你的Python版本是3.7+,直接用dict(sorted_players)即可,3.7+字典默认保留插入顺序 data_dict['Baseball'] = OrderedDict(sorted_players) # 4. 转回JSON字符串,indent用于格式化输出(可根据需求调整) output_json = json.dumps(data_dict, ensure_ascii=False, indent=2) # 输出结果 print(output_json)
运行结果
执行代码后,输出的JSON字符串中Baseball的球员会按key1降序排列,且完全保留原有的对象格式:
{ "Sport": "Outdoor", "Baseball": { "Jerry": {"key1": 7, "age": 25}, "Alice": {"key1": 5, "age": 30}, "Tom": {"key1": 3, "age": 28} } }
注意事项
- 虽然JSON规范本身不保证对象键值对的顺序,但Python 3.7及以上版本的
json模块会保留字典的插入顺序,下游消费函数只要能正确解析这种有序的JSON对象就能正常工作 - 如果不需要格式化输出,可将
json.dumps的indent参数设为None,得到紧凑的JSON字符串
内容的提问来源于stack exchange,提问作者Xandrix
相关产品推荐
相关产品推荐

