注:修改了原来的问题,以证明我正试图做什么
我有两个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 . 注意字典中的键可以按不同的顺序排列。
True
False
到目前为止我所做的:
表演一个 json.dumps() 具有 sort_keys 集合。这似乎只是对顶级对象进行排序,而不是深入到子对象。
json.dumps()
sort_keys
我也试过反对 y 将对象A移到对象B上方。然后执行 x == y 比较确实会回来 真 .
y
x == y
真
基于上述情况,看起来内置的相等运算符希望对象按相同的顺序排序。因此,我认为可以根据 Type 然后 Id 可能是前进的方向。这个 类型 字段确定对象是否包含 Space 属性,在某些对象中添加属性似乎表明排序很重要。
Type
Id
类型
Space
注1:性能并不重要。 注2:我不熟悉python,所以不确定从工具箱中使用哪个工具,或者是否有内置的工具。
谢谢。
JSON只是序列化的对象,可以将其加载到Python DISTS中 json 模块和 loads 或 load 方法(取决于您的输入),然后使用 == 操作人员
json
loads
load
==
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不是有效的,我必须添加一些逗号