2017-11-15 15 views
5

struct.unpackを使用してバイナリファイルから読み込んだ大きなオブジェクトがあり、値の一部はバイトとして読み込まれる文字配列です。Python 3 - 個々のリキャストなしでstruct.unpackからjsonにデータを書き込む

Python 3の文字配列は、Python 2のように文字列ではなくバイトとして読み込まれるため、 "bytes"はJSONシリアライズ可能ではないため、json.dumpsに直接渡すことはできません。

各値を検索してバイトを文字列に変換せずに、アンパックされた構造体からjsonに行く方法はありますか?

+0

したがって、バイナリデータはどのようにJSONで表されますか?これは表現の問題としてのPythonの問題ではありません。バイナリデータをbase64に変換する必要がありますか? Latin-1としてデコードされますか?それでも、表現できる有効なデータ構造に移行する必要があります。 –

答えて

6

この場合、カスタムエンコーダを使用することができます。以下を参照してください

import json 

x = {} 
x['bytes'] = [b"i am bytes", "test"] 
x['string'] = "strings" 
x['unicode'] = u"unicode string" 


class MyEncoder(json.JSONEncoder): 
    def default(self, o): 
     if type(o) is bytes: 
      return o.decode("utf-8") 
     return super(MyEncoder, self).default(o) 


print(json.dumps(x, cls=MyEncoder)) 
# {"bytes": ["i am bytes", "test"], "string": "strings", "unicode": "unicode string"} 
+0

パーフェクト、まさに私が探していたもの! – dexgecko

関連する問題