天天看點

python json轉字元串_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 importOrderedDict#這裡要保護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=(',', ':'))