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)

耗时对比

python处理json字符串(使用json.loads而不是eval())

耗时相差了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

标签:python,json字符串
0
投稿

猜你喜欢

  • Django模板语言 Tags使用详解

    2022-09-27 23:37:35
  • 如何实现一个python函数装饰器(Decorator)

    2023-12-02 19:38:37
  • Python双精度浮点数运算并分行显示操作示例

    2024-01-01 21:33:10
  • Python 异常处理Ⅳ过程图解

    2023-06-28 16:05:53
  • pytorch自定义不可导激活函数的操作

    2022-07-05 10:09:13
  • PHP实现图片上传并压缩

    2024-05-22 10:06:09
  • php ZipArchive解压缩实现后台管理升级问题详解

    2023-05-25 11:58:10
  • SQL常用数据库操作命令使用方法

    2007-08-22 13:24:00
  • python对绑定事件的鼠标、按键的判断实例

    2021-05-20 03:12:58
  • 网站中美好的细节

    2011-07-13 18:43:07
  • go语言发送smtp邮件的实现示例

    2023-06-20 06:59:14
  • 浅谈Python中的全局锁(GIL)问题

    2021-10-11 04:16:15
  • python从入门到精通(DAY 1)

    2022-08-12 17:26:56
  • python strip() 函数和 split() 函数的详解及实例

    2021-07-03 09:34:56
  • MySQL中由load data语句引起死锁的解决案例

    2024-01-19 19:37:14
  • pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)

    2023-10-13 11:55:44
  • python 实现体质指数BMI计算

    2023-01-25 12:44:56
  • 详解Python进行数据相关性分析的三种方式

    2022-05-09 18:50:12
  • Python求正态分布曲线下面积实例

    2021-01-28 18:20:07
  • python读取raw binary图片并提取统计信息的实例

    2023-09-22 12:46:35
  • asp之家 网络编程 m.aspxhome.com