首页 > 技术文章 > 递归对比json

dannyyao 2020-02-05 20:20 原文

遇到个问题:

如果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.csdn.net/zyk123zrx/article/details/83055947

https://zhidao.baidu.com/question/494397854859559132.html

 

-------------------------------------------------------------------------------------------------------------------------------------

找到个现成的模块,可不用重复造轮子:https://blog.csdn.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))

-------------------------------------------------------------------------------------------------------------------------------------

推荐阅读