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批量按比例缩小图片脚本分享
May 21 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
django框架防止XSS注入的方法分析
Jun 21 Python
Python Pandas数据结构简单介绍
Jul 03 Python
python flask几分钟实现web服务的例子
Jul 26 Python
Python类如何定义私有变量
Feb 03 Python
如何理解Python中包的引入
May 29 Python
增大python字体的方法步骤
Jul 05 Python
python+requests接口自动化框架的实现
Aug 31 Python
详解anaconda安装步骤
Nov 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 远程图片保存到本地的函数类
2008/12/08 PHP
php文件上传的简单实例
2013/10/19 PHP
PHP中的Memcache详解
2014/04/05 PHP
php解析json数据实例
2014/08/19 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
Bootstrap表单布局
2016/07/19 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
javascript实现弹幕墙效果
2019/11/28 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
浅谈MySQL中的触发器
2015/05/05 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
Python模块相关知识点小结
2020/03/09 Python
Python自带的IDE在哪里
2020/07/01 Python
Django配置跨域并开发测试接口
2020/11/04 Python
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
女大学生自我鉴定
2013/12/09 职场文书
学校火灾防控方案
2014/06/09 职场文书
个人工作表现评价材料
2014/09/21 职场文书
党支部三会一课计划
2014/09/24 职场文书
教师节感谢信
2015/01/22 职场文书
自荐信格式模板
2015/03/27 职场文书