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
使用するため、コードは正常に機能します。私の最初の考えは、おそらく JSON シリアライザーを作成する必要があるということです。それほど単純なことは難しいというわけではありませんが、別の方法でできるのであれば、そうしたくないと思います (たとえば、辞書をバイトの代わりに文字列を使用するように変換します)。str
bytes