在測試過程中經常會對比兩個json的異同,如果當json串較長時,一個一個的對比顯然是很浪費時間的。
所以寫一個比較json異同的測試方法是很有必要的。
下面介紹一下比較json異同的兩種方法,以及測試demo。
json_tools
首先介紹下python的類庫 json_tools
安裝:pip install json_tools
比較json
import json_tools def jsonDiff(): a={'left': 1, 'right': "r","box":"b"} b={'left': 1, 'right': "R","boxs":"box"} result=json_tools.diff(a,b) print result if __name__ == '__main__': jsonDiff()
結果:
[{'prev': 'b', 'remove': '/box'}, {'prev': 'r', 'value': 'R', 'replace': '/right'}, {'add': '/boxs', 'value': 'box'}]
輸出導讀:
上面的輸出顯示的是b相對於a的變化:
1) b和a都有鍵’right’,但是b相對a鍵’right’的值發生了變化,由原來的r變為R,所以比較結果的list有{'replace': '/right', 'value': 'R', 'prev': 'r'}
其中replace標識發生變化的鍵,value標識變化后即當前該鍵的值,prev表示該鍵此前的值。
2) b中的boxes相對於a,是新增的鍵,所以結果集中有{'add': '/boxs', 'value': 'box'}
3) b相對於a沒有box鍵,所以結果集中有{'remove': '/box', 'prev': 'b'}
多層嵌套的對比
輸出為:
[{'replace': '/left', 'value': 5, 'prev': 6}, {'add': '/right/ads/des', 'value': '新增鍵'}, {'remove': '/box/3', 'prev': {'id': 4, 'title': '標題4'}, 'details': 'array-item'}]
其中/right/ads/des,表示{“right”:{“ads”:{“des”:}}}
遞歸
下面介紹下作者自己編寫的比較方法,使用了遞歸的方法比較兩個json串
可以輸出不同的value,也可以根據自己的需要進行改進。