json字符串、python dict比较

json字符串比较,测试常用需求,整理了一下代码,全部比较完成后,输出比较结果。

说明:

1、对于json格式,先转为python dict;对于python dict,直接比较。

2、比较方式采用递归算法。

3、对于接口返回json串,一般不太大,这里全部比较完再返回,确保拿到全部比较结果。

#!/usr/bin/env python
# -*-coding:utf-8-*-

class comm_tools:

    def __init__(self):
        pass

    def cmp_dict(self,src_data, dst_data,ret_result):
        if isinstance (src_data, dict):
            """若为dict格式"""
            for key in dst_data:
                if key not in src_data:
                    result="src不存在这个key:%s" % (key)
                    ret_result.append(result)
            for key in src_data:
                if key in dst_data:
                    """递归"""
                    self.cmp_dict (src_data[key], dst_data[key],ret_result)
                else:
                    result="dst不存在这个key:%s" % (key)
                    ret_result.append (result)
        elif isinstance (src_data, list):
            """若为list格式"""
            if len (src_data) != len (dst_data):
                print("list len: '{}' != '{}'".format (len (src_data), len (dst_data)))
            for src_list, dst_list in zip (sorted (src_data), sorted (dst_data)):
                """递归"""
                self.cmp_dict (src_list, dst_list,ret_result)
        else:
            if str (src_data) != str (dst_data):
                result="字符串核对不通过,两个值分别为:src_data is:%s,dst_data is:%s" %( str(src_data),str(dst_data))
                ret_result.append (result)
        if ret_result:
            return False,ret_result
        else:
            return True,ret_result

if __name__ == '__main__':
    tool = comm_tools ()
    src_data={'a' : 1, 'b' : 3, 'c' : 3, 'd' : 4, 'e' : 5,'f':[2,3,4,5,1,6],'g':{'a':'1','b':2}}
    dst_data={'a' : 1, 'b' : 3, 'c' : 3, 'd' : 4, 'e' : 5,'f':[2,3,4,5,1,6],'g':{'a':'1','b':2}}
    #dst_data={'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5,'f':[2,3,4,5,1,7],'g':{'a':'1','b':2}}
    check_detail=[]
    check_result,check_detail= tool.cmp_dict(src_data,dst_data,check_detail)
    if check_result:
        print "核对通过"
    else:
        print "核对不通过,结果为:"
        for r in check_detail:
            print r

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值