Python:获取json之间对象名和子对象的差异列表

2024-03-28 12:02:45 发布

您现在位置:Python中文网/ 问答频道 /正文

python新手:

json1.json文件

{
    "key1": {
        "s11": 1,
        "s12": 2,
        "s13": "abc"
    },

    "key2": {
        "s21": [1, 2, 3, 4],
        "s22": {
            "s221": {
                "s2211": "abc"
            }
        }
    },
    "key3": "name1"
}

json2.json文件

{
    "key1": {
        "p12": 2,
        "p13": "abc",
        "s11": 1
    },

    "key2": {
        "ps22": {
          "ps221": {
            "ps2211": "abc"
          }
        },
        "ps21": ["1", "2", "3", "4"],
        "ps23" : "abc",
        "ps24":1,
        "s21": [1,2,3,4]
    }
}

我试图比较两个json对象名:json1.json和json2.json,并列出对象名之间的差异
例如,列出以下差异
1json1中存在的json2中缺少key3-->;使用下面的代码获取此项
2键2.s22更改为键2.ps22,键1.s12更改为键1.p12
三。不会干扰key2.s22.s221.s2211与key2.ps22.ps2211.ps2211不同的key2.s22.s2211,因为它们希望捕获初始层次结构差异

有人能帮我用适当的方法或命令来捕捉这些差异吗?你知道吗

我可以用下面的代码得到对象名的不同。你知道吗

d1=json.load(open("json1.json"))
d2=json.load(open("json2.json"))
s1=set(d1.keys()) - set(d2.keys())
print(s1)

o/p->;{'key3'}

但我的要求是在下一级层次结构中获得差异,即
键2.s22更改为键2.ps22
键2.s21更改为键2.ps21


Tags: 文件对象json差异abckey2key1key3
1条回答
网友
1楼 · 发布于 2024-03-28 12:02:45
import json

d1=json.load(open("1.json"))
d2=json.load(open("2.json"))

d11=list(d1.keys())
d22=list(d2.keys())

print(set(d1.keys())^set(d2.keys()))
chk_list = ["key2"]  # picking the keys to get the assymetry keynmaes within keynames

for i in chk_list:
    print(sorted(list(d1[i].keys())))
    print(sorted(list(d2[i].keys())))
    print(set(d1[i].keys()) ^ set(d2[i].keys()))

输出为

{'key3'}
['s21', 's22']
['ps21', 'ps22', 'ps23', 'ps24', 's21']
{'ps23', 's22', 'ps24', 'ps22', 'ps21'}

相关问题 更多 >