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的框架中为MySQL实现restful接口的教程
Apr 08 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Django如何开发简单的查询接口详解
May 17 Python
Django 迁移、操作数据库的方法
Aug 02 Python
python爬虫之遍历单个域名
Nov 20 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 Python
浅谈Python中对象是如何被调用的
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 session劫持和防范的方法
2013/11/12 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
php实现上传图片文件代码
2015/07/19 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
小程序外卖订单界面的示例代码
2019/12/30 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python open()文件处理使用介绍
2014/11/30 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python3 读取Word文件方式
2020/02/13 Python
pytorch中的inference使用实例
2020/02/20 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
投资入股合作协议书
2014/10/28 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python