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

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快几倍以上。这里就不详讲了。

到此这篇关于python处理json字符串(使用json.loads而不是eval())的文章就介绍到这了,更多相关python处理json字符串内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python处理json字符串转化为字典的简单实现

    今天一个朋友给个需求: 来来 {'isOK': 1, 'isRunning': None, 'isError': None} 怎么转换成字典 好,一看就是json转化很简单,开始: import json a = "{'isOK': 1, 'isRunning': None, 'isError': None}" print json.loads(a) 死活出不来结果,还报错,查了两个小时的百度,没搞明白. 最后,直接复制网上的代码,OK,运行成功,可是把我的a变量填进去,不行,报错:开

  • 对json字符串与python字符串的不同之处详解

    API的应用通常会处理json数据,刚好今天看到了json字符串和python字符串的区别,放一段代码,区别一下子就看出来,的确json 库为处理Json 数据提供了不少的便利. import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit&quo

  • python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)

    python3 json数据格式的转换(dumps/loads的使用.dict to str/str to dict.json字符串/字典的相互转换) Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码. json.loads(): 对数据进

  • python中将字典转换成其json字符串

    #这是Python中的一个字典 dic = { 'str': 'this is a string', 'list': [1, 2, 'a', 'b'], 'sub_dic': { 'sub_str': 'this is sub str', 'sub_list': [1, 2, 3] }, 'end': 'end' } //这是javascript中的一个JSON对象 json_obj = { 'str': 'this is a string', 'arr': [1, 2, 'a', 'b'],

  • python 接口返回的json字符串实例

    如下所示: JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数 描述 json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已编码的 JSON 字符串解码为 Python 对象 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import urllib import cookielib import json def login(): data

  • Python对象转JSON字符串的方法

    本文实例讲述了Python对象转JSON字符串的方法.分享给大家供大家参考,具体如下: import json class JSONObject(object): def __init__(self): self.name = 'Ahan' self.email = 'www@qq.com' self.age = 26 if __name__ == '__main__': o = JSONObject() print json.dumps(o, default=lambda o: o.__dic

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

    eval 跟json.loads 是不一样的函数,是有实现不一样功能的地方,但是在某些地方它们两个函数的功能是一样的,在这个时候如果对执行效率有一定要求的话,建议不要用eval,改用json.loads会有惊喜哦. 一.eval eval() 函数用来执行一个字符串表达式,并返回表达式的值. 二.json.loads json.loads 用于解码 JSON 数据.该函数返回 Python 字段的数据类型. json.loads与eval都能将json字符串转成python中的对象,但在实际工作

  • JSON字符串和JSON对象相互转化实例详解

    本文实例讲述了JSON字符串和JSON对象相互转化的方法.分享给大家供大家参考,具体如下: 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 例如: JSON字符串: var str = '{ "name": "name1","sex": "m" }'; JSON对象: var obj = {

  • js 将json字符串转换为json对象的方法解析

    例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为

  • Jquery解析json字符串及json数组的方法

    本文实例讲述了Jquery解析json字符串及json数组的方法.分享给大家供大家参考.具体如下: <!doctype html> <html> <head> <meta charset="utf-8"> <script src="js/jquery-1.6.2.min.js"></script> </head> <body> <hr /> <h3>

  • ajax响应json字符串和json数组的实例(详解)

    最近上班太忙,晚上抽空整理一下ajax请求中,后台返回json字符串和json数组的场景,以及前台的处理示例. 直接看代码. json字符串的后台响应 package com.ajax; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.serv

  • Jquery通过JSON字符串创建JSON对象

    <html> <body> <h2>通过 JSON 字符串来创建对象</h3> <p> First Name: <span id="fname"></span><br /> Last Name: <span id="lname"></span><br /> </p> <script type="text/ja

  • javascript json字符串到json对象转义问题

    在使用JavaScriptSerializer.Serialize 方法转json对象时,遇到一个问题,后台方法生成的json字符串中有没有转义的特殊字符代码: 而这些特殊的代码在使用javascript的转json对象方法时报错,为了讲这个转义的东西转义过来,折腾了半天.着实对javascript无语: 后台代转的对象是 Dictionary<string,string> DepartmentsExistTaskCounts 前台页面使用的MVC里的razor 写法,直接使用后台方法把数据转

  • JSON字符串转JSON对象

    适用酒店O2O菜单 var stri = [ //会员中心 { "menucode": 1, "menuname": "会员中心", }, { "menucode": 1, "name": "会员查询", "perm_id": 1, SubsMenu: [{ "perm_id": 1, "menueurl": "Cus

  • python中json操作之json.loads、json.load、json.jumps及json.jump用法

    目录 前言 0.python类型与json类型互换表 1.将json字符串转化(反序列化) (1)json.loads (2)json.load 延伸:如果.json文件中有注释怎么办 2.将python对象转化(序列化) (1)json.dumps (2)json.dump 总结 前言 经常在Python中对JSON格式的文件进行操作,今天对这些操作做一个总结 首先,需要导入json库import json 0.python类型与json类型互换表 Python JSON dict objec

  • 浅谈Python中的异常和JSON读写数据的实现

    异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except ... else来处理异常 一.以ZeroDivisionError为例,处理分母为0的除法异常 def division(numerator,denominator): result=numerator/denominator return result ret1=division(1,5) prin

随机推荐