【发布时间】:2018-02-06 07:10:47
【问题描述】:
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 并想列出对象名称的区别
例如,列出以下差异
1. json1 中存在的 json2 中缺少 key3 --> 用下面的代码得到了这个
2.key2.s22改为key2.ps22,key1.s12改为key1.p12
3. 不会打扰key2.s22.s221.s2211 与key2.ps22.ps221.ps2211 不同,因为想要捕获初始层次差异
有人可以帮助我使用适当的方法或命令来捕捉这些差异吗?
我可以通过以下代码了解对象名称的差异。
d1=json.load(open("json1.json"))
d2=json.load(open("json2.json"))
s1=set(d1.keys()) - set(d2.keys())
print(s1)
o/p -> {'key3'}
但我的要求是在下一级层次结构中获得差异,即,
key2.s22 改为 key2.ps22
key2.s21 改为 key2.ps21
【问题讨论】:
-
Difference in a dict的可能重复
-
没有内置或标准的方法来做到这一点。您必须实现(或研究是否已完成)一个递归函数才能做到这一点。
-
同意,到目前为止,我能够通过递归检查来检查对象中的唯一键名,如下所示
标签: python json python-3.x