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中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
Python简单计算文件夹大小的方法
Jul 14 Python
打包发布Python模块的方法详解
Sep 18 Python
Python算法应用实战之队列详解
Feb 04 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
python字符串的方法与操作大全
Jan 30 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
python绘制无向图度分布曲线示例
Nov 22 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
php实现登录页面的简单实例
2019/09/29 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
Vue组件开发初探
2017/02/14 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
六行python代码的爱心曲线详解
2019/05/17 Python
python字符串Intern机制详解
2019/07/01 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python异常处理try except过程解析
2020/02/03 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
法律系毕业生自荐信范文
2014/03/27 职场文书
保护地球的标语
2014/06/17 职场文书
爱护公共设施标语
2014/06/24 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
复兴之路观后感
2015/06/02 职场文书
军事博物馆观后感
2015/06/05 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
Python 中random 库的详细使用
2021/06/03 Python
Python循环之while无限迭代
2022/04/30 Python