欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python字典和json.dumps()的遇到的坑分析

 更新時間:2020年03月11日 14:39:39   作者:不要擋著我曬太陽  
在本篇文章里小編給大家整理了關(guān)于python字典和json.dumps()的遇到的坑分析,需要的朋友們可以學(xué)習(xí)下。

最近項(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)文章

最新評論