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 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
详解Python中for循环的使用
Apr 14 Python
python字符串连接方法分析
Apr 12 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
如何用python整理附件
May 13 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
使用python判断你是青少年还是老年人
Nov 29 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
利用Opencv实现图片的油画特效实例
Feb 28 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
PHP的历史和优缺点
2006/10/09 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
linux下php上传文件注意事项
2016/06/11 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
如何将python中的List转化成dictionary
2016/08/15 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python Flask实现restful api service
2017/12/04 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
Django 实现图片上传和下载功能
2020/12/31 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
毕业生实习证明
2014/09/19 职场文书
社会工作专业自荐信
2014/09/26 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
公司年夜饭通知
2015/04/25 职场文书
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers