[英]How to compare JSON objects in Python where each object can have different attributes
注意:修改后的原始问题可以确切说明我要执行的操作
我有两个需要检查的JSON对象列表是“相同”,例如
x = [
{
"Id": "A",
"Type": "A",
"Component": "A",
"Level": "A",
"Debug": "A",
"Space": 1
},
{
"Id": "B",
"Type": "B",
"Component": "B",
"Level": "B",
"Debug": "B",
}
]
y = [
{
"Id": "B",
"Type": "B",
"Component": "B",
"Level": "B",
"Debug": "B",
},
{
"Id": "A",
"Type": "A",
"Component": "A",
"Level": "A",
"Debug": "A",
"Space": 1
}
]
出于我所做的目的,这些对象将被归类为相同的对象。
背景:我有无法控制的API返回的数据。 我需要检查返回的数据是否与我拥有的预存储定义相同。 如果是相同的,那就是两个列表包含相同数量的对象,并且包含相同的键,那么我需要返回True
。 否则为False
。 请注意,字典中的键可以采用不同的顺序。
到目前为止我尝试过的是:
执行带有sort_keys
设置的json.dumps()
。 这似乎只是对顶级对象进行排序,而不能深入到子对象中。
我也尝试过在对象y
中将对象A移动到对象B之上。然后进行x == y
比较不会返回True
。
基于上述内容,内置的等式运算符似乎希望对象以相同顺序排序。 因此,我认为可以根据“ Type
和“ Id
进行排序的方法可能是前进的方向。 Type
字段确定对象是否将包含Space
属性,在某些对象中添加该属性似乎表明排序很重要。
注1:性能并不重要。 注意2:我对Python不熟悉,因此不确定从工具箱中使用哪个工具,或者是否内置了任何工具。
谢谢。
Json只是序列化的对象,您可以使用json
模块和loads
或load
方法(取决于您的输入)将其加载到python dict中,然后仅使用==
运算符
import json
d1 = json.loads("""[{
"a": 1,
"b": 2,
"c": {
"x": 9,
"y": 10
}
},
{
"a": 10,
"b": 20,
"c": {
"x": 90,
"y": 100
}
}]""")
d2 = json.loads("""[{
"b": 2,
"a": 1,
"c": {
"x": 9,
"y": 10
}
},
{
"a": 10,
"b": 20,
"c": {
"y": 100,
"x": 90
}
}]""")
print(d1 == d2) # True
附带说明,您的json无效,我必须添加一些逗号
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.