如何比较两个json文件并在对象中返回不匹配的键和值

问题描述 投票:0回答:1

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磁盘值)

python-3.x
1个回答
0
投票

通过它们的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)}")
© www.soinside.com 2019 - 2024. All rights reserved.