python - 当键更改并且值是更多键值对时,是否可以订购键值对的 JSON 对象。
问题描述
在 python 中,我无法弄清楚如何将 JSON 对象(如下所示)输出为字符串,其中 Baseball 的内容基于“key1”(降序)排序。当我收到 JSON(来自数据源)时,播放器出现故障。最终,我的代码需要对播放器进行排序,然后将其传递给下一个排序的函数。请假设我无法将 JSON 的格式修改为/拥有数组,因为消费函数无法处理(因为它当前是编写的)。
示例 JSON:
{
"DataSource1":{
"Baseball":{
"Sean":{
"key1":"10",
},
"Gene":{
"key1":"100",
},
"Alan":{
"key1":"1",
}
}
},
"DataSource2":{
"Baseball":{
"Bob_Smith":{
"key1":"1"
},
"Adam_Filmore":{
"key1":"100"
},
"Joe_Allen":{
"key1":"10"
}
}
}
"DataSource3":{
"Baseball":{
"Jake":{
"key1":"10"
},
"Huck":{
"key1":"1"
},
"Eric":{
"key1":"100"
}
}
}
}
我希望 JSON 如何输出的示例:
{
"DataSource1":{
"Baseball":{
"Alan":{
"key1":"1",
},
"Sean":{
"key1":"10",
},
"Gene":{
"key1":"100",
}
}
},
"DataSource2":{
"Baseball":{
"Bob_Smith":{
"key1":"1"
},
"Joe_Allen":{
"key1":"10"
},
"Adam_Filmore":{
"key1":"100"
}
}
}
"DataSource3":{
"Baseball":{
"Huck":{
"key1":"1"
},
"Jake":{
"key1":"10"
},
"Eric":{
"key1":"100"
}
}
}
}
解决方案
用于sorted()
建立所需的排序顺序,然后将结果存储在collections.OrderedDict
.
试试这个:
import json
from collections import OrderedDict
with open('data.json') as f:
data = json.load(f)
for data_source in data:
data[data_source]["Baseball"] = OrderedDict(
sorted(data[data_source]["Baseball"].items(),
key=lambda x: x[1]["key1"]))
with open('new_data.json', 'w') as f:
json.dump(data, f, indent=4)
推荐阅读
- applescript - Apple脚本将系统偏好设置窗格置于前面
- php - 如何在 x-mailer 中添加附件?
- keycloak - Keycloak:我可以在决定阻止用户时考虑帐户 IP 地址吗?
- git - 进行全局设置时,Git 不会在 HOME 目录中查找 .gitconfig
- c# - C# 使用 JObject.Parse 解析 JSON 以忽略丢失的字段
- python - 姜戈。创建作为相关模型中现有字段的副本的字段。
- php - pdo_sqlsrv:如何识别 fetch "false" 是错误还是空记录集?
- vba - 使用 VBA 根据更改的单元格值隐藏各种行
- java - java 11 中 JWS (java web start) 的替代品
- python - 网页抓取以从嵌入式 Google 地图链接中提取坐标