簡體   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