如何比较两个json文件并在对象中返回不匹配的键和值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何比较两个json文件并在对象中返回不匹配的键和值相关的知识,希望对你有一定的参考价值。
JSON File1:
[{
"App_Name": "Test1",
"Instances": "2",
"Memory": "2G",
"Disk_Quota": "1G"
}, {
"App_Name": "Test2",
"Instances": "2",
"Memory": "2G",
"Disk_Quota": "1G"
}, {
"App_Name": "Test3",
"Instances": "1",
"Memory": "1G",
"Disk_Quota": "1G"
}]
JSON file2:
[ {
"App_Name": "Test3",
"Instances": "1",
"Memory": "1G",
"Disk_Quota": "5G"
},{
"App_Name": "Test1",
"Instances": "3",
"Memory": "2G",
"Disk_Quota": "1G"
}, {
"App_Name": "Test2",
"Instances": "2",
"Memory": "8G",
"Disk_Quota": "1G"
}]
我必须比较这两个JSON文件,并且需要打印JSON对象中不匹配的值。
到目前为止,我已经尝试过这个
def Compare():
with open("Jsonfile1.json") as f:
data = f.read()
env1 = json.loads(data)
with open("jsonfile2.json") as f:
data = f.read()
env2 = json.loads(data)
for name in env1:
for names in env2:
if name['App_Name'] == names['App_Name']:
if name['Instances'] != names['Instances']:
print("unmatched val {} -i {}".format(name['App_Name'],names['Instances']))
if name['Memory'] != names['Memory']:
# print(name['Memory'], names['Memory'])
print("unmatched val {} -m {}".format(name['App_Name'],names['Memory']))
if name['Disk_Quota'] != names['Disk_Quota']:
print("unmatched val {} -k {}".format(name['App_Name'],names['Disk_Quota']))
Compare()
例外的输出:
如果实例不匹配,则打印(jsonfile1实例值)如果内存不匹配,则打印(jsonfile1内存值)如果磁盘不匹配,则打印(jsonfile1磁盘值)
答案
通过它们的zip()
进行迭代应该更快,更干净并完成工作:
zip()
输出:
for d1, d2 in zip(env1, env2):
if d1["App_Name"] == d2.get("App_Name"):
for key in d1:
if d1.get(key) != d2.get(key):
print(f"env1's value for key='{key}' is {d1.get(key)}")
以上是关于如何比较两个json文件并在对象中返回不匹配的键和值的主要内容,如果未能解决你的问题,请参考以下文章