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中的面向对象编程详解(下)
Apr 13 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
简单实现python进度条脚本
Dec 18 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
python实现TCP文件传输
Mar 20 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
Django中F函数的使用示例代码详解
Jul 06 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 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&MYSQL服务器配置说明
2006/10/09 PHP
来自PHP.NET的入门教程
2006/10/09 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
python numpy数组复制使用实例解析
2020/01/10 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
《孔繁森》教学反思
2014/04/17 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
财务工作失职检讨书
2014/11/21 职场文书
九寨沟导游词
2015/02/02 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
清明扫墓感想
2015/08/11 职场文书
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL