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 30 Python
Django框架中方法的访问和查找
Jul 15 Python
Python实现配置文件备份的方法
Jul 30 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
Python函数中不定长参数的写法
Feb 13 Python
Python基础之文件读取的讲解
Feb 16 Python
Python matplotlib画图与中文设置操作实例分析
Apr 23 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Django实现文件上传下载功能
Oct 06 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
python实现扫雷游戏的示例
Oct 20 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正则表达式(regar expression)
2011/09/10 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
php上传excel表格并获取数据
2017/04/27 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
提高网站信任度的技巧
2008/10/17 Javascript
JavaScript 学习点滴记录
2009/04/24 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
django orm模块中的 is_delete用法
2020/05/20 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
捐书寄语赠言
2014/01/18 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书