バイト文字列を含む辞書を でエンコードしようとしていますjson
が、次の結果が返されますis not JSON serializable error
:
import base64
import json
data = {}
encoded = base64.b64encode(b'data to be encoded')
data['bytes'] = encoded
print(json.dumps(data))
表示されるエラー:
TypeError: b'ZGF0YSB0byBiZSBlbmNvZGVk\n' is not JSON serializable
バイトを含む辞書を JSON で正しくエンコードするにはどうすればよいですか?
ベストアンサー1
json.dumps()
入力には文字列が必要です。base64.b64encode()
バイトをエンコードしたら、ASCII コーデックを使用してそれらのバイトを文字列に変換する必要があります。
import base64
encoded = base64.b64encode(b'data to be encoded') # b'ZGF0YSB0byBiZSBlbmNvZGVk' (notice the "b")
data['bytes'] = encoded.decode('ascii') # 'ZGF0YSB0byBiZSBlbmNvZGVk'
b64decode()
バイトだけでなく ASCII のみの文字列も処理するため、元のデータを取り戻すためにバイトに再エンコードする必要がないことに注意してください。
decoded = base64.b64decode(data['bytes']) # b'data to be encoded'