Python json轉字符串的一些細節


      要調PHP那邊的接口,php那邊一直都校驗不過,很是郁悶。沒辦法,只能讓人把發送成功的代碼拿過來看,不過是php寫的,步驟都是一樣:

php端:

  1. json對象轉json字符串.

  2. 對json字符串base64.

  3. 加入一些其他變量與2得到的base64進行md5

 

php運行成功,但python一直都不過,把php的變量都打印了出來,前后對比了很多次,發現,有兩個不同的地方:

1. python里json轉字符串,默認的是有indent,即多一個空格的。這點跟php里的json_encode()方法不同,php里沒有空格。

2. python如果用dict,轉成字符串無法保證字符串順序,這點導致得到的base64跟php的不同。

就是這兩點,才導致python調用接口一直驗證不過。

解決:

對於1. 查看json模塊的dumps方法源碼,發現有個separators參數,設置為 (',', ':') 即可。

對於2. 使用collection模塊里的OrderedDict類,可以保證字符串順序

 

代碼片段:

from collections import OrderedDict
    
# 這里要保護json轉字符串順序,不然php那邊校驗不過
inner = OrderedDict(
       [("tab", OrderedDict([("type", "exp"), ("value", 1)]))]
)

code = OrderedDict(
       [("user", 23445),
         ("api", 2364),
        ("guid", '3f60614f-315d-11e7-b690-f8bc127f78d8'),
        ("cmds",inner)]
)
# 這里就是順序的字符串
json.dumps(code, encoding="UTF-8", separators=(',', ':'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM