根据对象属性中的特定单词对JSON数据进行排序



我想从json文件中排序数据。

我有以下data.jsonjson文件内容:每个包是一个具有两个属性的对象。

{
"attr_2.4.48": {
"exposed": false,
"score": "Not qualified"
},
"cockpit_218": {
"exposed": false,
"score": "partial qualified"
},
"base-passwd_3.5.29": {
"exposed": false,
"score": "Qualified"
},
"audit_2.8.5": {
"exposed": true,
"score": "partial qualified"
},
"base-files_3.0.14": {
"exposed": false,
"score": "Not qualified"
}
}

输出应按以下方式排序:

  • 首先是"score": "Not qualified"

  • 第二包与"score": "partial qualified"

  • 和最后的"score": "Qualified"

具有相同score的每个包也应按字母顺序排序

排序后的数据应该是这样的:

{
"attr_2.4.48": {
"exposed": false,
"score": "Not qualified"
},
"base-files_3.0.14": {
"exposed": false,
"score": "Not qualified"
},
"audit_2.8.5": {
"exposed": true,
"score": "partial qualified"
},
"cockpit_218": {
"exposed": false,
"score": "partial qualified"
},
"base-passwd_3.5.29": {
"exposed": false,
"score": "Qualified"
}
}

我目前的问题是,我不知道如何根据socre值对数据进行排序。

我的代码只按字母顺序按score值排序包:

with open(data.json, 'r', encoding='utf-8') as json_file:
json_content = json.load(json_file)
package = content.keys()
sorted_content = sorted(package, key=lambda ip: content[ip]['score'], reverse=False)

我如何更新我的代码,使数据看起来像上面显示的输出?

如果json_content是您解析的json文件,您可以:

from collections import OrderedDict
order = ["Not qualified", "partial qualified", "Qualified"]
json_content = OrderedDict(
sorted(
json_content.items(), key=lambda i: (order.index(i[1]["score"]), i[0])
)
)
print(json.dumps(json_content, indent=4, sort_keys=False))

打印:

{
"attr_2.4.48": {
"exposed": false,
"score": "Not qualified"
},
"base-files_3.0.14": {
"exposed": false,
"score": "Not qualified"
},
"audit_2.8.5": {
"exposed": true,
"score": "partial qualified"
},
"cockpit_218": {
"exposed": false,
"score": "partial qualified"
},
"base-passwd_3.5.29": {
"exposed": false,
"score": "Qualified"
}
}

最新更新