2012-06-21 8 views
12

以下のpythonで2つのjsonオブジェクトを比較する方法は、jsonのサンプルです。2 jsonをpythonで比較する方法

UPDATE:配列/リストリテラルは[]代わり{}の内側にあるため

sample_json1={ 
    { 
     "globalControlId": 72, 
     "value": 0, 
     "controlId": 2 
    }, 
    { 
     "globalControlId": 77, 
     "value": 3, 
     "controlId": 7 
    } 
} 

sample_json2={ 
    { 
     "globalControlId": 72, 
     "value": 0, 
     "controlId": 2 
    }, 
    { 
     "globalControlId": 77, 
     "value": 3, 
     "controlId": 7 
    } 
} 
+0

もし、もし 'sample_json1 == sample_json2:'が十分でないのなら、なぜ説明できますか? – Aprillion

+2

あなたが書いた "json"サンプルは有効ではありません。ヘルプが必要な場合は、より多くのコンテキスト/作業コードを提供する必要があります。 – Wilduck

答えて

3

これらはない有効なJSON/Pythonオブジェクトはあるが、(オブジェクトの直列化されたJSON配列)辞書のリストを比較しますリスト項目の順序を無視して、リストがセットにをソートしたり、変換する必要があります。

sample_json1=[{"globalControlId": 72, "value": 0, "controlId": 2}, 
       {"globalControlId": 77, "value": 3, "controlId": 7}] 
sample_json2=[{"globalControlId": 77, "value": 3, "controlId": 7}, 
       {"globalControlId": 77, "value": 3, "controlId": 7}, # duplicity 
       {"globalControlId": 72, "value": 0, "controlId": 2}] 

# dictionaries are unhashable, let's convert to strings for sorting 
sorted_1 = sorted([repr(x) for x in sample_json1]) 
sorted_2 = sorted([repr(x) for x in sample_json2]) 
print(sorted_1 == sorted_2) 

# in case the dictionaries are all unique or you don't care about duplicities, 
# sets should be faster than sorting 
set_1 = set(repr(x) for x in sample_json1) 
set_2 = set(repr(x) for x in sample_json2) 
print(set_1 == set_2) 
+0

順序は以下の例が – santosh

+0

sample_json1 = [失敗{ "globalControlIdを":72、 "値":0、 "controlId":2}の例を変更した場合、この習慣仕事、 { "globalControlId":77、 "値":3、 "controlId":7}] sample_json2 = [ { "globalControlId":77、 "値":3、 "controlId":7}、 { "globalControlId":72、 "value":0、 "controlId":2}] – santosh

+0

注文が変わっても比較が成功するはずです。 – santosh

11

通常の比較が適切に機能しているようです。

import json 
x = json.loads("""[ 
    { 
     "globalControlId": 72, 
     "value": 0, 
     "controlId": 2 
    }, 
    { 
     "globalControlId": 77, 
     "value": 3, 
     "controlId": 7 
    } 
]""") 

y = json.loads("""[{"value": 0, "globalControlId": 72,"controlId": 2}, {"globalControlId": 77, "value": 3, "controlId": 7 }]""") 

x == y # result: True  
+0

おかげさまで感謝しています:) – ashim888