Python3では、JSONとバイト列の扱いが少し複雑になります。特に、json.dumps()関数は文字列を入力として期待していますが、バイト列をエンコードする場合はどうすればよいのでしょうか?

まず、json.dumps()関数を使ってバイト列をエンコードする基本的な方法を見てみましょう。以下に示すように、base64.b64encode()関数を使ってバイト列をエンコードし、その結果をASCIIコーデックを使って文字列に変換します。

import base64
encoded = base64.b64encode(b'data to be encoded')  # b'ZGF0YSB0byBiZSBlbmNvZGVk'
data['bytes'] = encoded.decode('ascii')  # 'ZGF0YSB0byBiZSBlbmNvZGVk'

しかし、この方法ではASCII範囲外の文字を含むバイト列をエンコードすることはできません。そのような場合は、カスタムのJSONエンコーダを作成することで対応できます。

import json

class ByteEncoder(json.JSONEncoder):
    def default(self, x):
        return x.decode('utf-8') if isinstance(x, bytes) else super().default(x)

print(json.dumps({'a': 'aa', 'b': b'bb'}, indent=1, cls=ByteEncoder))

このByteEncoderクラスは、バイト列をUTF-8文字列にデコードします。これにより、バイト列を含むオブジェクトをjson.dumps()関数でエンコードできます。

以上がPython3でJSONとバイト列を扱う基本的な方法です。適切にエンコーダを選択することで、さまざまなデータタイプをJSONとしてシリアライズすることが可能になります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です