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 相关文章推荐
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
python实现支付宝转账接口
May 07 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
Django 请求Request的具体使用方法
Nov 11 Python
如何运行带参数的python脚本
Nov 15 Python
python中必要的名词解释
Nov 20 Python
Python 支持向量机分类器的实现
Jan 15 Python
python能自学吗
Jun 18 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
thinkphp分页集成实例
2017/07/24 PHP
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
python中 logging的使用详解
2017/10/25 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
苹果Mac升级:MacSales.com
2017/11/20 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
中英文自我评价语句
2013/12/20 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
小学新课改心得体会
2016/01/22 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
Python开发五子棋小游戏
2022/05/02 Python