4
我有(從http.server
使用類)寫在Python3一個簡單的Web服務器我是從2移植到3Python3 json.dumps給出了類型錯誤:鍵必須是一個字符串
我有以下代碼:
# More code here...
postvars = cgi.parse_qs(self.rfile.read(length),
keep_blank_values=1)
something.json_run(json.dumps(postvars))
會拋出:
TypeError: keys must be a string
通過檢查數據,我已經確定parse_qs
似乎編碼鍵作爲字節,這是什麼扔ERR或者(json
顯然不喜歡字節)。
import json
json.dumps({b'Throws error' : [b"Keys must be a string"]})
json.dumps({'Also throws error': [b'TypeError, is not JSON serializable']})
json.dumps({'This works': ['No bytes!']})
這裏最好的解決方案是什麼?在Python 2中,代碼工作正常,因爲parse_qs
使用str
而不是bytes
。我最初的想法是,我可能需要編寫一個JSON序列化程序。並不是說這對於簡單的事情來說很困難,但我不希望我能夠以其他方式做到這一點(例如,將字典翻譯爲使用字符串而不是字節)。
python 2中的'str'實際上與'bytes'相同。 JSON庫在Python 3中變得更挑剔(有理由)。 –
所以我正在發現...:P –
另請參閱:http://bit.ly/unipain – Daenyth