python字典和json.dumps()的遇到的坑分析


Posted in Python onMarch 11, 2020

最近项目中需要与管易云erp做对接,看了他的接口文档,php的示例代码,于是用python仿写。

其中传的参数data中前面几个json数据是固定的,最后需要加一个签名,该签名是对前面的json数据字符串化后,首尾拼接上screct字符串,再做md5处理(32位大写),再将该签名添加到之前的json中作为post参数传递过去。

问题就出在组装json字符串和签名中,因为python内置的字典是无序的,导致我组装好的json数据作为参数传递给自己编写的签名函数时,字典内部的顺序是变化的,所以签名前后的md5值不一样,导致频频报错,自己起初没在意数据顺序的事,因为对接金蝶erp时没有签名这一项,数据传递的很简单,导致排错时方向出现错误。后来想到这了顾开始解决。

解决方法是使用collections库中的OrderedDict(有序字典)模块,组装好的数据就不会乱序,做的md5签名也就前后一致了

但,在对json数据使用json.dumps()方法时,字符串化后的数据在逗号后会有一个空格,导致md5值出错

原理:

python字典和json.dumps()的遇到的坑分析

解决方法是

json.dumps(data,separators=(',',':'))

最后,将自己写的函数留下来做个例子

def getShops():
  data = OrderedDict()
  data["appkey"] = appkey
  data["sessionkey"] = sessionkey
  data["method"] = method
  data["page_no"] = "1"
  data["page_size"] = "10"
  data["sign"] = sign(data,secret)
  
  response = requests.post(url=url, data=json.dumps(data))
  print(response.text)


def sign(data,secret):
  str = json.dumps(data,separators=(',',':'))
  fullStr = secret+str+secret
  signCode = hashlib.md5(fullStr.encode("utf-8")).hexdigest().upper()
  #print(signCode)
  return signCode

以上就是python字典和json.dumps()的遇到的坑分析的详细内容,更多关于python字典和json.dumps()的坑的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
详解详解Python中writelines()方法的使用
May 25 Python
深入理解Python中的内置常量
May 20 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
Python实现Dijkstra算法
Oct 17 Python
python ---lambda匿名函数介绍
Mar 13 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
Python面向对象之类和实例用法分析
Jun 08 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Python运算符+与+=的方法实例
Feb 18 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 #Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 #Python
django admin 添加自定义链接方式
Mar 11 #Python
django xadmin 管理器常用显示设置方式
Mar 11 #Python
django从后台返回html代码的实例
Mar 11 #Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 #Python
python3 实现口罩抽签的功能
Mar 11 #Python
You might like
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python3使用SMTP发送带附件邮件
2020/06/16 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python类反射机制使用实例解析
2019/12/30 Python
python小白学习包管理器pip安装
2020/06/09 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
Django实现简单的分页功能
2021/02/22 Python
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
爱国主义教育活动总结
2014/05/07 职场文书
承租经营合作者协议书
2014/10/01 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
总经理致辞
2015/07/29 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
PyTorch中的torch.cat简单介绍
2022/03/17 Python
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python