JSON でバイトをエンコードするにはどうすればいいですか? json.dumps() が TypeError をスローします 質問する

JSON でバイトをエンコードするにはどうすればいいですか? json.dumps() が TypeError をスローします 質問する

バイト文字列を含む辞書を でエンコードしようとしています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'

おすすめ記事