我有一个用 Python3 编写的简单 Web 服务器(使用来自 的类http.server
),我将其从 2 移植到 3。
我有以下代码:
# 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
似乎将键编码为字节,这就是引发错误的原因(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 序列化程序。并不是说这么简单的事情很难,但如果我能以其他方式做到这一点,我宁愿不这样做(例如,将字典翻译成使用字符串而不是字节)。