python字典和json.dumps()的遇到的坑分析
最近項(xiàng)目中需要與管易云erp做對接,看了他的接口文檔,php的示例代碼,于是用python仿寫。
其中傳的參數(shù)data中前面幾個json數(shù)據(jù)是固定的,最后需要加一個簽名,該簽名是對前面的json數(shù)據(jù)字符串化后,首尾拼接上screct字符串,再做md5處理(32位大寫),再將該簽名添加到之前的json中作為post參數(shù)傳遞過去。
問題就出在組裝json字符串和簽名中,因?yàn)閜ython內(nèi)置的字典是無序的,導(dǎo)致我組裝好的json數(shù)據(jù)作為參數(shù)傳遞給自己編寫的簽名函數(shù)時,字典內(nèi)部的順序是變化的,所以簽名前后的md5值不一樣,導(dǎo)致頻頻報(bào)錯,自己起初沒在意數(shù)據(jù)順序的事,因?yàn)閷咏鸬鹐rp時沒有簽名這一項(xiàng),數(shù)據(jù)傳遞的很簡單,導(dǎo)致排錯時方向出現(xiàn)錯誤。后來想到這了顧開始解決。
解決方法是使用collections庫中的OrderedDict(有序字典)模塊,組裝好的數(shù)據(jù)就不會亂序,做的md5簽名也就前后一致了
但,在對json數(shù)據(jù)使用json.dumps()方法時,字符串化后的數(shù)據(jù)在逗號后會有一個空格,導(dǎo)致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()的遇到的坑分析的詳細(xì)內(nèi)容,更多關(guān)于python字典和json.dumps()的坑的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征
今天小編就為大家分享一篇pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12淺談opencv自動光學(xué)檢測、目標(biāo)分割和檢測(連通區(qū)域和findContours)
這篇文章主要介紹了淺談opencv自動光學(xué)檢測、目標(biāo)分割和檢測(連通區(qū)域和findContours),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python中的進(jìn)程操作模塊(multiprocess.process)
這篇文章介紹了Python中的進(jìn)程操作模塊(multiprocess.process),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Python實(shí)戰(zhàn)實(shí)現(xiàn)爬取天氣數(shù)據(jù)并完成可視化分析詳解
這篇文章主要和大家分享一個用Python實(shí)現(xiàn)的小功能:獲取天氣數(shù)據(jù),進(jìn)行可視化分析,帶你直觀了解天氣情況!感興趣的小伙伴可以學(xué)習(xí)一下2022-06-06matplotlib實(shí)現(xiàn)區(qū)域顏色填充
這篇文章主要為大家詳細(xì)介紹了matplotlib實(shí)現(xiàn)區(qū)域顏色填充,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03Python進(jìn)階之如何快速將變量插入有序數(shù)組
在我們學(xué)習(xí)python的過程中,學(xué)習(xí)序列是一門必修課。本文我們就來一起看一看Python是如何快速將變量插入有序數(shù)組的,感興趣的可以了解一下2023-04-04