[英]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.