Python处理json字符串为什么不建议使用eval()
一、前言最近发现一些小伙伴使用eval来处理json,而且为了能够将json成功转为字典而不报错,还写了如下的赋值操作 (因为json中空为null,假为false,真为true与Python的表达不一样,如果不进行下面代码的赋值,用eval转换就会报错):null=Nonefalse=Falsetrue=True其实Python的标准库中有处理json的库,就叫json,比如要把json字符串转
一、前言
最近发现一些小伙伴使用eval来处理json,而且为了能够将json成功转为字典而不报错,还写了如下的赋值操作 (因为json中空为null
,假为false
,真为true
与Python的表达不一样,如果不进行下面代码的赋值,用eval转换就会报错):
null=None
false=False
true=True
其实Python的标准库中有处理json的库,就叫json
,比如要把json字符串转为字典的话只需要使用json.loads
这个方法就可以了;另外,eval
处理json的性能也是远远比不上json
库的。
【Python测试交流群:8140 78962】
二、Json.loads与eval 性能对比
现在我们创建一个长度为100万的json字符串数据:
test_data = json.dumps({str(i): i for i in range(1000000)})
然后分别通过eval
,json.loads
来处理,他们的时间对比:
1. eval
执行时间为: 0:00:03.730528
2. json.loads
执行时间为: 0:00:00.466475
执行时间相差了8倍多!
另外在自己的项目中,刚好有需求涉及到100KB+的json字符串转换,它们的耗时对比如下:
如果没有并发执行的情况下,使用json.loads或eval来转换花费的时间差距不是能够感知出来的,但涉及并发执行那就会变得很明显。所以快把你代码中处理json的eval
改为json.loads
吧!
如果做请求使用的是requests库的话,可以直接使用它的json()
方法,例如:
res=requests.get(url='http://qqlykm.cn/api/t/url.php?url=quniao.blog.csdn.net')
res_dict=res.json()
查看源码发现它也是调用python标准库中的json.loads
方法,只是这样可以少写一点代码。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)