【Python】バイト配列(bytes)をJSON形式に変換する方法をわかりやすく解説
Pythonでバイト配列(bytes型)をJSON形式に変換したい場合、まずbytesオブジェクトを文字列(str型)にデコードする必要があります。その後、標準ライブラリのjsonモジュールを使ってJSON形式に変換します。
ステップ1:バイト列を文字列にデコードする
デコードには、文字列クラスが持つdecode()メソッドを使用します。引数には、デコードに使いたいエンコーディング(ここではutf-8)を指定します。
例:bytesを文字列へデコード
my_str = b"Hello" # 先頭の b はバイト列であることを意味する
new_str = my_str.decode('utf-8') # utf-8エンコーディングでデコード
print(new_str)
出力結果
Hello
ステップ2:文字列をJSON形式に変換する
バイト列を文字列に変換できたら、json.dumps()メソッドを使うことで、その文字列をJSON形式の文字列にシリアライズできます。
例:JSON形式への変換
import json
my_str = b'{"foo": 42}' # バイト列
new_str = my_str.decode('utf-8') # utf-8でデコードして文字列に変換
d = json.dumps(new_str)
print(d)
出力結果
"{\"foo\": 42}"
dumps()によって文字列がJSON文字列として出力され、内側のダブルクォートがエスケープされているのが分かります。
補足:JSONとして解析(パース)したい場合
単にJSON形式の文字列を作るのではなく、Pythonの辞書(dict)としてデータを扱いたい場合は、json.loads()を使用します。
import json
my_str = b'{"foo": 42}'
data = json.loads(my_str) # bytesを直接渡せる
print(data["foo"]) # 42
なお、Python 3.6以降ではjson.loads()がbytes型を直接受け取れるため、明示的なデコードは必須ではありません。一方、json.dumps()に渡す場合は、事前にstr型へ変換しておく必要があります。
-
【Python】辞書形式の文字列をdict型に変換する2つの安全な方法
はじめにPythonでは、文字列として表現された辞書(例:{foo: bar})を、実際の辞書(dict型)オブジェクトに変換したい場面がよくあります。この記事では、代表的な2つの変換方法である ast.literal_eval() と json.loads() の使い方を解説します。方法1: ast.literal_eval() を使うast.literal_eval() を使うと、文字列をPythonの式として安全に評価できます。この関数は、式ノードまたはPython式を含む文字列を評価しますが、許可されているのは文字列・数値・タプル・リスト・辞書・ブール値・Noneといったリテラル構造の
-
Pythonでバイトリテラルを文字列に変換する方法|decode()の使い方を解説
バイトリテラル(bytesオブジェクト)をPythonの文字列(str)に変換するには、デコード処理が必要です。最も基本的な方法は、bytesオブジェクトが持つ decode() メソッドを使うことです。 decode()メソッドを使った変換 decode() メソッドには、バイト列のエンコーディング(文字コード)を指定します。以下は、UTF-8でエンコードされたバイトリテラルを文字列に変換する例です。 >>> babcde.decode(utf-8) abcde このように、バイトリテラル babcde が通常の文字列 abcde に変換されます。なお、エンコーディン