python处理json字符串(使用json.loads而不是eval())
作者:曲鸟 发布时间:2023-06-13 11:50:39
eval 跟json.loads 是不一样的函数,是有实现不一样功能的地方,但是在某些地方它们两个函数的功能是一样的,在这个时候如果对执行效率有一定要求的话,建议不要用eval,改用json.loads会有惊喜哦。
一、eval
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
二、json.loads
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
json.loads与eval都能将json字符串转成python中的对象,但在实际工作中发现,在处理json字符串时,json.loads的性能远超eval
三、效率对比
下列代码是通过json.loads和eval方式将103KB大小的json字符串转python字典的耗时对比:
old_data = redis_con.get('api-case-version:' + str(version_id))
if old_data:
l_start = datetime.datetime.now()
load_dict = json.loads(old_data)
l_end = datetime.datetime.now()
print('json.loads', l_end - l_start)
e_start = datetime.datetime.now()
old_dict = eval(old_data)
e_end = datetime.datetime.now()
print('eval', e_end - e_start)
耗时对比
耗时相差了13倍多。
在平时的场景下很难遇到处理大JSON字符串的情况,所以使用loads或eval差别可以忽略不计。但在我目前的项目中,是需要取swagger上的所有接口做对比,JSON字符串的大小经常达到1M+,这时使用loads和eval就有了较为明显的性能差异了。
但是使用json.loads有个地方需要注意一下,json.loads对列表没什么要求,但是对字典的格式有一定的要求,key值要保持是双引号的key,单引号的key或者int类型都会报错。
报错内容如下
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
因此字典的话建议储存格式就是要用json.dumps转换成标准的json格式然后再储存成字符串。
另外如果是其他序列化格式的,对json的速度不满意的可以考虑用一下msgpack,使用方式也很简单,但是也是对格式有一定的要求,有很多博主进行过测试,都是比json快几倍以上。这里就不详讲了。
来源:https://quniao.blog.csdn.net/article/details/117706789
猜你喜欢
- 最近发现一常见的加载进度条(loadding)的问题,所以试试,觉得还不错,大家可以看下.当然这个只是一个效果而已!呵呵,用的着的时候,你就
- 可以使用numpy中的linspace函数np.linspace(start, stop, num, endpoint, retstep,
- 1.SocketServer模块编写的TCP服务器端代码Socketserver原理图服务端:import SocketServer &nb
- 第一种方案、最简单、普通的方法:SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TO
- 小张的Pycharm最近弹出提示框 Your license has expired提示过期....纳尼!!!!是不是看到这个也很头疼,。于
- 目录jQuery的$.ajaxWebpack时代的开始深入了解Promise消灭嵌套await-to-js总结jQuery的$.ajax在开
- 一.Orcal临时表分类1.会话级临时表1).保存一个会话Session的数据。2).当会话退出时,临时表数据自动清空。表结构与元数据还存储
- 今天整理之前写的代码,发现在做数模期间写的用python实现的遗传算法,感觉还是挺有意思的,就拿出来分享一下。首先遗传算法是一种优化算法,通
- 在使用DB2以来,碰到了几次出现提示SQL1032N错误,每次出错时出错信息大概如下:11/21/2004 22:15:33 0 0 SQL
- 一直在用JS写ASP,也不是特别原因,只是当初学的是JS,后来学ASP时知道ASP也可以用JS写,就没去学VBS.前几个月刚学ASP的时候找
- vue动态添加表单validateField验证,代码如下所示:<template> <el-f
- 前因后果公司有人阳了,今天在家上班,突然小姨子就问我有没有baidu文库会员,想下载点东西,我心想这还要会员?用Python不是分分钟的事情
- mysqldump -u user -p db tab1 tab2 &
- 一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。=== 判断规则如果类型不同,就[不相等]&n
- 前言判断文件是否存在在实际应用中用的非常多,下面我们来归纳一下检查文件、文件夹是否存在的各种操作一.检查文件夹/文件是否存在1. os.pa
- 本文旨在分类讲述执行计划中每一种操作的相关信息。数据访问操作 首先最基本的操作就是访问数据。这既可以通过直接访问表,也可以通过访问索引来进行
- 在工作中遇到把DataGrid中绑定的后台数据库数据展示给用户时把负数变为0的小问题,现在记录下来。例子中数据表示这个样子的:-------
- openlayer是目前我们gis常用的一款开源的,并且反馈都特别好的软件了,像之前的ol3, 风靡一时,地图实现也很简单,很实用,目前vu
- python的验证码库(captcha)将验证码做成这样:是不是和各大网页的图片源地址是一样,话不多说,让我们看代码:我是用django和p
- 因为这两天在学习深度学习需要用到ubuntu+python3.6版本,所以就按照网上的教学安装,但是ubuntu16.04自带的是pytho