以下是示例输入json文件:
json1:
[
{
"App_Name": "hospital",
"Instances": 1,
"Memory": 256,
"Disk_Quota": 1024
},
{
"App_Name": "ecommerce",
"Instances": 10,
"Memory": 2048,
"Disk_Quota": 1024
},
{
"App_Name": "airlines",
"Instances": 3,
"Memory": 1024,
"Disk_Quota": 1024
}]
json2:
[
{
"App_Name": "bus",
"Instances": 1,
"Memory": 256,
"Disk_Quota": 1024
},
{
"App_Name": "hospital",
"Instances": 10,
"Memory": 2048,
"Disk_Quota": 1024
},
{
"App_Name": "govt",
"Instances": 3,
"Memory": 1024,
"Disk_Quota": 1024
}]
我需要比较两个JSON文件,并需要将所有不匹配的应用程序名称对象返回到单独的变量中,例如
expected output: ==================
unmatched objects in file = [{"App_Name": "ecommerce","Instances": 10,"Memory": 2048,"Disk_Quota": 1024},{"App_Name": "airlines","Instances": 3,"Memory": 1024,"Disk_Quota": 1024 }]
unmatched objects in file2 = [{"App_Name": "bus","Instances": 1,"Memory": 256,"Disk_Quota": 1024},{"App_Name": "govt","Instances": 3,"Memory": 1024,"Disk_Quota": 1024}
发布于 2020-05-06 17:26:32
使用json.load
将每个文件反序列化为字典列表,将字典列表重新构造为以App_Name
为键的嵌套字典。然后,只需使用列表理解检查其他字典中是否存在这些键,并将其过滤掉。
from json import load
with open("json1.json") as json1, open("json2.json") as json2:
json1dict = {d["App_Name"]: d for d in load(json1)}
json2dict = {d["App_Name"]: d for d in load(json2)}
unmatched1 = [v for k, v in json1dict.items() if k not in json2dict]
print(unmatched1)
unmatched2 = [v for k, v in json2dict.items() if k not in json1dict]
print(unmatched2)
输出:
[{'App_Name': 'ecommerce', 'Instances': 10, 'Memory': 2048, 'Disk_Quota': 1024}, {'App_Name': 'airlines', 'Instances': 3, 'Memory': 1024, 'Disk_Quota': 1024}]
[{'App_Name': 'bus', 'Instances': 1, 'Memory': 256, 'Disk_Quota': 1024}, {'App_Name': 'govt', 'Instances': 3, 'Memory': 1024, 'Disk_Quota': 1024}]
https://stackoverflow.com/questions/61631529
复制相似问题