最近在做接口自动化测试,响应的内容大多数是多层嵌套的 json 数据,如果一层层的去剥,效率不高,脚本繁重,所以写了一个可以通过(key1.key2.key3)形式获取嵌套字典值的方法,如有不对或者需要优化的地方欢迎指出。

def get_dict_value(date, keys, default=None):
    #default=None,在key值不存在的情况下,返回None
    keys_list = keys.split('.')
    #以“.”为间隔,将字符串分裂为多个字符串,其实字符串为字典的键,保存在列表keys_list里
    if isinstance(date,dict):
        #如果传入的数据为字典
        dictionary = dict(date)
        #初始化字典
        for i in keys_list:
            #按照keys_list顺序循环键值
            try:
                if dictionary.get(i) != None:
                    dict_values = dictionary.get(i)
                #如果键对应的值不为空,返回对应的值
                elif dictionary.get(i) == None:
                    dict_values = dictionary.get(int(i))
                #如果键对应的值为空,将字符串型的键转换为整数型,返回对应的值
            except:
                return default
                    #如果字符串型的键转换整数型错误,返回None
            dictionary = dict_values
        return dictionary
    else: 
        #如果传入的数据为非字典
        try:
            dictionary = dict(eval(date))
            #如果传入的字符串数据格式为字典格式,转字典类型,不然返回None
            if isinstance(dictionary,dict):
                for i in keys_list:
                    #按照keys_list顺序循环键值
                    try:
                        if dictionary.get(i) != None:
                            dict_values = dictionary.get(i)
                        #如果键对应的值不为空,返回对应的值
                        elif dictionary.get(i) == None:
                            dict_values = dictionary.get(int(i))
                        #如果键对应的值为空,将字符串型的键转换为整数型,返回对应的值
                    except:
                        return default
                            #如果字符串型的键转换整数型错误,返回None
                    dictionary = dict_values
                return dictionary
        except:
            return default

运行结果:
一:字典类型数据。

二:字典类型数据,包含的键为数字。

三:json 类型的字符串。


↙↙↙阅读原文可查看相关链接,并与作者交流