如何在Python中比较JSON对象,其中每个对象可以具有不同的属性

时间:2019-01-23 15:34:08

标签: python python-3.x

注意:修改后的原始问题恰好可以证明我正在尝试做的事情

我有两个需要检查的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。请注意,字典中的键可以采用不同的顺序。

到目前为止,我已经尝试过:

  • 执行设置了json.dumps()的{​​{1}}。这似乎只是对顶级对象进行排序,而没有深入到子对象中。

  • 我还尝试过将对象sort_keys移动到对象B上方的对象A。然后进行y比较会返回x == y

基于以上所述,看起来内置的equals运算符期望对象以相同的顺序排序。因此,我认为可以根据True然后再按Type进行排序的方法可能是前进的方向。 Id字段确定对象是否将包含Type属性,在某些对象中添加该属性似乎表明排序很重要。

注1:性能并不重要。 注意2:我对Python不熟悉,因此不确定从工具箱使用哪个工具,或者是否内置了任何工具。

谢谢。

1 个答案:

答案 0 :(得分:0)

Json只是序列化的对象,您可以使用json模块和loadsload方法(取决于您的输入)将其加载到python dict中,然后仅使用{{1 }}运算符

==

请注意,您的json无效,我必须添加一些逗号