python字典和json.dumps()的遇到的坑分析
最近項目中需要與管易云erp做對接,看了他的接口文檔,php的示例代碼,于是用python仿寫。
其中傳的參數(shù)data中前面幾個json數(shù)據(jù)是固定的,最后需要加一個簽名,該簽名是對前面的json數(shù)據(jù)字符串化后,首尾拼接上screct字符串,再做md5處理(32位大寫),再將該簽名添加到之前的json中作為post參數(shù)傳遞過去。
問題就出在組裝json字符串和簽名中,因為python內置的字典是無序的,導致我組裝好的json數(shù)據(jù)作為參數(shù)傳遞給自己編寫的簽名函數(shù)時,字典內部的順序是變化的,所以簽名前后的md5值不一樣,導致頻頻報錯,自己起初沒在意數(shù)據(jù)順序的事,因為對接金蝶erp時沒有簽名這一項,數(shù)據(jù)傳遞的很簡單,導致排錯時方向出現(xiàn)錯誤。后來想到這了顧開始解決。
解決方法是使用collections庫中的OrderedDict(有序字典)模塊,組裝好的數(shù)據(jù)就不會亂序,做的md5簽名也就前后一致了
但,在對json數(shù)據(jù)使用json.dumps()方法時,字符串化后的數(shù)據(jù)在逗號后會有一個空格,導致md5值出錯
原理:

解決方法是
json.dumps(data,separators=(',',':'))
最后,將自己寫的函數(shù)留下來做個例子
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數(shù)據(jù)可視化之初探?Seaborn
Seaborn?是一個基于?Matplotlib?的?Python?數(shù)據(jù)可視化庫,它提供了更高級別的接口,使得創(chuàng)建美觀的統(tǒng)計圖形變得非常簡單,在這篇文章中,我們將討論?Seaborn?的基礎使用方法,包括如何創(chuàng)建各種常見的統(tǒng)計圖形2023-07-07
詳解如何在cmd命令窗口中搭建簡單的python開發(fā)環(huán)境
這篇文章主要介紹了詳解如何在cmd命令窗口中搭建簡單的python開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
python已協(xié)程方式處理任務實現(xiàn)過程
這篇文章主要介紹了python已協(xié)程方式處理任務實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12
Scrapy框架爬取Boss直聘網Python職位信息的源碼
今天小編就為大家分享一篇關于Scrapy框架爬取Boss直聘網Python職位信息的源碼,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02

