根据对象 属性 中的特定词对 JSON 数据进行排序
Sort JSON data based on a specific word in a property of an object
我想对 json 文件中的数据进行排序。
我有以下 data.json
json 文件内容:
每个包都是一个具有两个属性的对象。
{
"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"
}
}
我想对 json 文件中的数据进行排序。
我有以下 data.json
json 文件内容:
每个包都是一个具有两个属性的对象。
{
"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"
}
}