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 相关文章推荐
python实现哈希表
Feb 07 Python
介绍Python中的__future__模块
Apr 27 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
解决python 文本过滤和清理问题
Aug 28 Python
Django实现文件上传和下载功能
Oct 06 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
Python类的继承super相关原理解析
Oct 22 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 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 date()日期时间函数详解
2010/05/16 PHP
PHP中的替代语法介绍
2015/01/09 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
Python实现迭代时使用索引的方法示例
2018/06/05 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
python框架flask表单实现详解
2019/11/04 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
python 下载文件的多种方法汇总
2020/11/17 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
python re模块和正则表达式
2021/03/24 Python
房地产销售计划书
2014/01/10 职场文书
法学专业求职信
2014/07/15 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书