布尔测试 python 字典_Python之字符串转字典的小秘密

原标题:Python之字符串转字典的小秘密

新书

速递

文 | 智能测试者

来源 | 微信公众号 智能自动化测试

起源

需求是将前端传递的字符串转化为字典,后端(Python)使用这个字典当做参数体去请求任意接口。

笔者采用的方法是使用json包中的loads函数, 示例如下:

importjson

if__name__ == '__main__':

test_str = '{"status": "ok"}'

test_json = json.loads(test_str)

print( 'type -----------> %s'% type(test_json))

print( 'test_json -----------> %s'% test_json)

运行后控制台输出如下:

type -----------> < class'dict'>

test_json-----------> { 'status': 'ok'}

Process finished with exitcode 0

可以看到输出是没什么大毛病的,但是作为一个严谨的人,思考了一下业务应用场景后,决定再测试一下是否能将字符串中的整数、浮点数、嵌套字典、数组、布尔值、空值成功转化。

至于元组和日期类型就放过他吧 : )

探索的过程

探索代码:

import json

if__name__ == '__main__':

# 整数+浮点+嵌套字典+数组 测试

test_str = '{"status": {"number": 123, "float": 123.321, "list": [1,2,3, "1"]}}'

test_json = json.loads(test_str)

print( 'type -----------> %s'% type(test_json))

print( 'test_json -----------> %s'% test_json)

控制台输出:

type -----------> < class'dict'>

test_json-----------> { 'status': { 'number': 123, 'float': 123.321, 'list': [ 1, 2, 3, '1']}}

Process finished with exitcode 0

嗯,到目前为止都没啥毛病。

然而

震惊!惊人发现

核心代码:

import json

if__name__ == '__main__':

# 布尔值+空值 测试

test_str = '{"status1": true, "status2": false, "status3": null}'

test_json = json.loads(test_str)

print( 'type -----------> %s'% type(test_json))

print( 'test_json -----------> %s'% test_json)

控制台输出:

type -----------> < class'dict'>

test_json-----------> { 'status1': True, 'status2': False, 'status3': None}

Process finished with exitcode 0

相信聪明的读者已经发现,json.loads函数可以 将字符串中的true,false,null成功转化为True,False,None。

笔者查找 json.loads函数源码 (Ctrl + B 已经按烂)后,发现了这一段代码:

elifnextchar == 'n'andstring[idx:idx + 4] == 'null':

returnNone, idx + 4

elifnextchar == 't'andstring[idx:idx + 4] == 'true':

returnTrue, idx + 4

elifnextchar == 'f'andstring[idx:idx + 5] == 'false':

returnFalse, idx + 5

这,这代码,真硬气。

往下翻还有惊喜哦:

elifnextchar == 'N'andstring[idx:idx + 3] == 'NaN':

returnparse_constant( 'NaN'), idx + 3

elifnextchar == 'I'andstring[idx:idx + 8] == 'Infinity':

returnparse_constant( 'Infinity'), idx + 8

elifnextchar == '-'andstring[idx:idx + 9] == '-Infinity':

returnparse_constant( '-Infinity'), idx + 9

总结

每段代码背后都有小秘密,仔细挖掘就会得到不一样的乐趣与收获。

正所谓 博客驱动开发,开发只是为了更好的 写作!

有任何问题欢迎随时讨论哈 : )返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值