最近在做接口自动化测试,响应的内容大多数是多层嵌套的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类型的字符串。

=============================================================

有个朋友分享过这段代码,大家可以试试。

class obj(object):
def __init__(self, d):
for a, b in d.items():
if isinstance(b, (list, tuple)):
setattr(self, a, [obj(x) if isinstance(x, dict) else x for x in b])
else:
setattr(self, a, obj(b) if isinstance(b, dict) else b) d = {'a':1, 'b':{'c':2}, 'd':[{'e':1}]} res = obj(d)
print res.a
print res.b.c
print res.d[0].e
 

最新文章

  1. shell脚本中的反引号使用 `
  2. Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用
  3. xss利用和检测平台
  4. Python3基础 print 中使用+号,连接两个字符串
  5. 解读为什么有符号的char可表示范围是-128~+127
  6. 自学HTML5第四节(canvas画布详解)
  7. UVa 10986 - Sending email
  8. CICD - Teamcity 配置之二:SSIS Package 自动部署
  9. Word Count
  10. 【原创】运维基础之Docker(2)通过docker部署zookeeper nginx tomcat redis kibana/elasticsearch/logstash mysql kafka mesos/marathon
  11. IntelliJ IDEA安装scala插件并创建scala示例
  12. 查询当前局域网下所有IP和物理网卡地址
  13. 没有-jackson相关依赖会抛出如下异常--------在spring官方文档有解释
  14. cpp 区块链模拟示例(六) 交易
  15. vue使用矢量图
  16. 如何完全卸载oracle和删除oracle在注册表中的注册信息
  17. 【转】Shell编程基础篇-下
  18. p1518 The Tamworth Two
  19. php编译GD库 JPEG Support
  20. JS属性描述符之Object.defineProperty()定义对象属性特性

热门文章

  1. 在IIS上发布并运行ASP.NET Core
  2. MongoDB学习记录(三) - MongoDB的"增查改删"操作之"查"
  3. 离线eclipse添加web工程
  4. 使用kbmmw 的REST 服务实现上传大文件
  5. windows10系统安装Oralce11g时遇到INS-13001环境不满足最低要求
  6. 解决css冲突的问题
  7. Node.js中实现套接字服务
  8. Android开发者的Anko使用指南(二)之Dialogs
  9. 网络编程——I/O复用
  10. jquery跨域方法