递归对比json
遇到个问题:
如果list中是dic,sort会报错,解决办法:sorted
(a,key
=
lambda
x:x[
"x"
])
def compare_data(src_data, dst_data): if isinstance(src_data, dict): """若为dict格式""" for key in dst_data: if key not in src_data: print("src不存在这个key") for key in src_data: if key in dst_data: # thiskey = key """递归""" compare_data(src_data[key], dst_data[key]) else: print("dst不存在这个key") elif isinstance(src_data, list): """若为list格式""" if len(src_data) != len(dst_data): print("list len: '{}' != '{}'".format(len(src_data), len(dst_data))) compare_flag = 0 sort_key = '' for key in src_data[0]: sort_key = key for src_list, dst_list in zip(sorted(src_data,key=lambda x:x["%s" % sort_key]), sorted(dst_data,key=lambda x:x["%s" % sort_key])): """递归""" compare_data(src_list, dst_list) else: if str(src_data) != str(dst_data): print("%s != %s, 比对失败" % (src_data, dst_data))
参考:
https://blog.****.net/zyk123zrx/article/details/83055947
https://zhidao.baidu.com/question/494397854859559132.html
-------------------------------------------------------------------------------------------------------------------------------------
找到个现成的模块,可不用重复造轮子:https://blog.****.net/qq_27884799/article/details/93904318
pip install jsoncomparedeep
from json_compare import Jcompare cp = Jcompare() a = {"k1":"v1","k2":["v1", "v3"]} b = {"k1":"v1","k2":["v4", "v1"]} print(cp.compare(a, b))
-------------------------------------------------------------------------------------------------------------------------------------