web-dev-qa-db-ja.com

TypeError: 'float32'タイプのオブジェクトはJSONシリアライズ可能ではありません

numpy.float32番号であり、JSONには入れません。この問題を克服するための適切なアプローチは何ですか?

import numpy as np
import json

a = np.float32(1)
json.dumps(a)

TypeError: Object of type 'float32' is not JSON serializable
24
Franco Piccolo

それは文字列でなければならないので、次のようにすることができます:

_json.dumps(str(a))
_

編集:

JSONは、オブジェクトデータをシリアル化するための形式です。 Python=型は本当に気にしない、または知りません。jsonパッケージは、json.dumps()を渡したオブジェクトを_conversion table_を介して文字列形式に変換しようとします。一部のタイプのみをサポートします(以下のドキュメントを参照)。

これが、文字列を渡すだけでこの問題を回避するのが良いと思う理由です。_numpy.float32_がテーブルにないだけです。

一部のユーザーは、文字列をdumpsに明示的に渡すと「間違っている」とコメントしているため、ここにドキュメントを追加します

json.dumps(obj、*、skipkeys = False、Ensure_ascii = True、check_circular = True、allow_nan = True、cls = None、indent = None、separators = None、default = None、sort_keys = False、** kw)objをシリアライズこの変換テーブルを使用して、JSON形式のstrに変換します。引数は、dump()と同じ意味です。

注JSONのキー/値ペアのキーは、常にstrタイプです。辞書がJSONに変換されると、辞書のすべてのキーが文字列に強制変換されます。この結果、ディクショナリがJSONに変換されてからディクショナリに戻されると、ディクショナリは元のディクショナリと一致しない場合があります。つまり、xに文字列以外のキーがある場合、loads(dumps(x))!= xです。

ここの公式ドキュメントから取得: https://docs.python.org/3/library/json.html

19
vencaslac