PythonでbytesをJSONにエンコードする方法について説明します。この記事は、Stack Overflowの質問と公式ドキュメンテーションを参考にしています。
まず、Pythonのjson
モジュールは、エンコードする際に文字列を期待します。しかし、base64.b64encode()
はbytesをエンコードするため、これらのbytesをASCIIコーデックを使用して文字列に変換する必要があります。
import base64
# データをエンコード
encoded = base64.b64encode(b'data to be encoded') # b'ZGF0YSB0byBiZSBlbmNvZGVk' (「b」に注目)
data['bytes'] = encoded.decode('ascii') # 'ZGF0YSB0byBiZSBlbmNvZGVk'
元のデータを取得するために、再エンコードする必要はありません。なぜなら、b64decode()
はASCIIのみの文字列と同様にbytesを処理するからです。
decoded = base64.b64decode(data['bytes']) # b'data to be encoded'
また、bytesオブジェクトがほぼJSONであるが、シングルクォートをダブルクォートに置き換える必要があり、それは文字列である必要があります。
import json
my_bytes_value = b'[{\\'Date\\': \\'2016-05-21T21:35:40Z\\', \\'CreationDate\\': \\'2012-05-05\\', \\'LogoType\\': \\'png\\', \\'Ref\\': 164611595, \\'Classe\\': [\\'Email addresses\\', \\'Passwords\\'],\\'Link\\':\\'[5](http://some_link.com)\\'}]'
# UTF-8 bytesをUnicodeにデコードし、シングルクォートをダブルクォートに置き換えて有効なJSONにします
my_json = my_bytes_value.decode('utf8').replace("'", '"')
print(my_json)
print('- ' * 20)
# JSONをPythonリストにロードし、それをフォーマットされたJSONとしてダンプします
data = json.loads(my_json)
s = json.dumps(data, indent=4, sort_keys=True)
print(s)
以上がPythonでbytesをJSONにエンコードする方法についての説明です。この情報が役立つことを願っています。