🐶

バイナリデータをjson.dumpsする【python】

2021/07/19に公開

概要

opencvで取得した画像情報をバイナリにし、dictに入れたあと、json.dumpsしようとしたらエラーが出た。jsonにはバイナリ型なんてないのでエラーが出た模様。Cloud Pub/Subにて、どうしてもjsonで受け渡ししたかったので、そのための備忘録。

※追記
現行自分は以下の処理は必要なくなりました。ただもしかすると必要なタイミングがあるかもしれないので、残します。

サンプル

以下のコードは動かしていませんが、変換の所は動作確認済みです。

import cv2
import base64
import json

image = cv2.imread("<file_name>") # 仮にjpegファイルを読み込んでいるものとします
_, image = cv2.imencode(".jepg", image)
image = image.tobytes() # ここでbytes型になる

image = base64.b64encode(image).decode() # base64でエンコード後utf-8でデコード

image_dict = {
    "image": image
}

# ここでエラーが出て困ってた
image_dict = json.dumps(image_dict) # 確かここでstr型になる

# 今回はサンプルなので、すぐにdict型に戻します。
image_dict = json.load(image_dict)

image_bynary = base64.b64decode(image_dict["image"].encode()) # ここで画像データがbytes型に戻ります

おわりに

これが賢い方法かは分かりませんが、とりあえずスニペット的に残します。意外にバイナリで扱いたい場面が多いので、扱いに困りますね。

Discussion