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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
python直接获取API传递回来的参数方法
Dec 17 Python
深入理解Python异常处理的哲学
Feb 01 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
Django中使用MySQL5.5的教程
Dec 18 Python
tensorflow 环境变量设置方式
Feb 06 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
Django使用echarts进行可视化展示的实践
Jun 10 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/06/20 PHP
php 时间计算问题小结
2009/01/04 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
深入分析PHP设计模式
2020/06/15 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python中map()函数的使用方法示例
2017/09/29 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
python实现xml转json文件的示例代码
2020/12/30 Python
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
任课老师推荐信范文
2013/11/24 职场文书
婚礼主持词
2014/03/13 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
大学生个人学年总结
2015/02/15 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫