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中的高级数据结构详解
Mar 27 Python
Python科学计算之Pandas详解
Jan 15 Python
python绘制简单折线图代码示例
Dec 19 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
新手入门Python编程的8个实用建议
Jul 12 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
用python写PDF转换器的实现
Oct 29 Python
2021年最新用于图像处理的Python库总结
Jun 15 Python
python游戏开发Pygame框架
Apr 22 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
一个SQL管理员的web接口
2006/10/09 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
js 小数取整的函数
2010/05/10 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
js事件委托和事件代理案例分享
2017/07/25 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
python二进制文件的转译详解
2019/07/03 Python
python中必要的名词解释
2019/11/20 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Oracle的内存结构(Memory structures)
2015/06/10 面试题
仓库主管的岗位职责
2013/12/04 职场文书
应届生求职信
2014/05/31 职场文书
小学教师岗位职责
2015/04/02 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS