如何比较两个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文件并在对象中返回不匹配的键和值的主要内容,如果未能解决你的问题,请参考以下文章

比较两个对象数组并在新数组中返回匹配值

如何通过 jq 中这些键的键和值对 json 文件进行排序

PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?

比较两个字段并在另一个表中返回不匹配的存储过程

将json对象值变成javascript中的键和值[关闭]

PHP:如何比较一个数组中的键与另一个数组中的值,并返回匹配?