python字典和json.dumps()的遇到的坑分析
作者:不要挡着我晒太阳 发布时间:2023-07-27 22:03:29
标签:python字典,json.dumps()
最近项目中需要与管易云erp做对接,看了他的接口文档,php的示例代码,于是用python仿写。
其中传的参数data中前面几个json数据是固定的,最后需要加一个签名,该签名是对前面的json数据字符串化后,首尾拼接上screct字符串,再做md5处理(32位大写),再将该签名添加到之前的json中作为post参数传递过去。
问题就出在组装json字符串和签名中,因为python内置的字典是无序的,导致我组装好的json数据作为参数传递给自己编写的签名函数时,字典内部的顺序是变化的,所以签名前后的md5值不一样,导致频频报错,自己起初没在意数据顺序的事,因为对接金蝶erp时没有签名这一项,数据传递的很简单,导致排错时方向出现错误。后来想到这了顾开始解决。
解决方法是使用collections库中的OrderedDict(有序字典)模块,组装好的数据就不会乱序,做的md5签名也就前后一致了
但,在对json数据使用json.dumps()方法时,字符串化后的数据在逗号后会有一个空格,导致md5值出错
原理:
解决方法是
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
来源:https://www.cnblogs.com/miaoweiye/p/12461499.html


猜你喜欢
- 一直想了解Web编程的技术。PHP是进行Web编程重要的一种语言,书上总是说,PHP是用于服务器端的编程语言。但是,实在不能理解它是怎么用于
- 本文实例讲述了python使用xmlrpclib模块实现对百度google的ping功能。分享给大家供大家参考。具体分析如下:最近在做SEO
- 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴:import tens
- 概要相信很多像我一样初入门前端的时候,都是基于某个模板来学。 vue-element-admin 或者 vue-element-templa
- Pandas是Python中非常常用的数据处理工具,使用起来非常方便。它建立在NumPy数组结构之上,所以它的很多操作通过NumPy或者Pa
- 最近用layer ui上传文件遇到了一个问题,我想在上传文件之前把data-id传入后台,layer文档找了一下也没有找到类似的说明,经过一
- 本文实例讲述了Python实现获取命令行输出结果的方法。分享给大家供大家参考,具体如下:Python获取命令行输出结果,并对结果进行过滤找到
- 如下所示:# coding = GBKa =[1,2,3,4,5]sum=0b = len(a)print("这个数组的长度为:&
- 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\")方
- 在服务器端asp程序可以接受html页面上的form传来的参数,那么它又如何实现IE地址参数判断呢?当地址栏没有参数"id"时
- 布尔类型是PHP中 最简单的类型。它的值可以为 TRUE 或 FALSE。如:$foo=false;$foo1=true;echo &quo
- 官网下载就好, https://www.python.org/downloads/release/python-352/用installer
- PHP添加图像处理(ImageMagick)下载地址:http://pecl.php.net/package/imagick安装说明:htt
- 1. 概念map函数也是python中的一个内置函数,用法同之前讲过的filter函数类似。map在这里的意思是映射的意思,会根据提供的函数
- 一. adb 相关命令:1. 关闭adb服务:adb kill-server2. 启动adb服务 adb start
- 本文实例讲述了JavaScript实现彩虹文字效果的方法。分享给大家供大家参考。具体如下:<HTML><HEAD>&
- 前言最近在做项目高可用时,需要使用数据同步。由于只有双节点,且采用主主同步可能存在循环同步的风险,故综合考虑采用Mysql主从同步(Mast
- 目录产生背景(已经有了存储过程,为什么还要使用自定义函数)发展历史构成使用方法适用范围注意事项疑问 内容产生背景(已经有了存储过程,为什么还
- 本文介绍了Scrapy项目实战之爬取某社区用户详情,分享给大家,具有如下:get_cookies.pyfrom selenium impor
- 平常的开发过程中不免遇到需要把model转成字典的需求,尤其是现在流行前后端分离架构,Json格式几乎成了前后端之间数据交换的标准,这种mo