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中用于计算指数的exp()方法
May 14 Python
python比较两个列表大小的方法
Jul 11 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
Python编程中的异常处理教程
Aug 21 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
python 中的int()函数怎么用
Oct 17 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python requests获取网页常用方法解析
Feb 20 Python
Python的PIL库中getpixel方法的使用
Apr 09 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支持页面回退的两种方法[转]
2007/02/14 PHP
php学习之 数组声明
2011/06/09 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python2与Python3的区别详解
2020/02/09 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
一些Solaris面试题
2015/12/22 面试题
银行办理业务介绍信
2014/01/18 职场文书
党的群众路线学习材料
2014/05/16 职场文书
网络营销计划
2015/01/17 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
培训心得体会怎么写
2016/01/25 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang