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卸载模块的方法汇总
Jun 07 Python
如何高效使用Python字典的方法详解
Aug 31 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
Django 连接sql server数据库的方法
Jun 30 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 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制作简单的内容采集器的原理分析
2008/10/01 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
php实现encode64编码类实例
2015/03/24 PHP
js data日期初始化的5种方法
2013/12/29 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
ionic3 懒加载
2017/08/16 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
玩转python爬虫之正则表达式
2016/02/17 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
经典c++面试题五
2014/12/17 面试题
我的动漫时代的创业计划书范文
2014/01/27 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
优秀家长事迹材料
2014/05/17 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
教师继续教育反思周记
2015/06/25 职场文书