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入门教程
Feb 08 Python
python多重继承实例
Oct 11 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
python查看微信好友是否删除自己
Dec 19 Python
python2.7到3.x迁移指南
Feb 01 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
python实现抠图给证件照换背景源码
Aug 20 Python
python防止随意修改类属性的实现方法
Aug 21 Python
Series和DataFrame使用简单入门
Nov 13 Python
Python常用编译器原理及特点解析
Mar 23 Python
python爬虫快速响应服务器的做法
Nov 24 Python
Python利用capstone实现反汇编
Apr 06 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 日期时间函数的高级应用技巧
2009/10/10 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
告诉大家什么是JSON
2008/06/10 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
wxPython学习之主框架实例
2014/09/28 Python
详解Django通用视图中的函数包装
2015/07/21 Python
简单实现python爬虫功能
2015/12/31 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
自学考试自我鉴定范文
2013/09/26 职场文书
工程索赔意向书
2014/08/30 职场文书
2014年实习生工作总结
2014/11/27 职场文书
新生开学寄语大全
2015/05/28 职场文书
在职证明书模板
2015/06/15 职场文书
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL