繁体   English   中英

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

[英]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模块和loadsload方法(取决于您的输入)将其加载到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM