Pythonからjsonファイルに簡単な辞書を送信しようとしていますが、「TypeError:1425 is not JSON serializable」メッセージが表示され続けます。
import json
alerts = {'upper':[1425],'lower':[576],'level':[2],'datetime':['2012-08-08 15:30']}
afile = open('test.json','w')
afile.write(json.dumps(alerts,encoding='UTF-8'))
afile.close()
デフォルトの引数を追加すると書き込みますが、整数値は文字列としてjsonファイルに書き込まれますが、これは望ましくありません。
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
問題が見つかりました。問題は、私の整数が実際には numpy.int64
であるということでした。
Numpy.int64をPython 3のjson文字列にダンプするのに問題があるようで、pythonチームは既にそれについて会話しています。詳細は こちら をご覧ください。
Serhiy Storchakaが提供する回避策があります。非常にうまく機能するので、ここに貼り付けます。
def convert(o):
if isinstance(o, numpy.int64): return int(o)
raise TypeError
json.dumps({'value': numpy.int64(42)}, default=convert)
これで問題が解決しました:
def serialize(self):
return {
my_int: int(self.my_int),
my_float: float(self.my_float)
}
または、最初にオブジェクトをデータフレームに変換することもできます。
df = pd.DataFrame(obj)
次に、このdataframe
をjson
ファイルに保存します。
df.to_json(path_or_buf='df.json')
お役に立てれば
int64
(numpyから)からint
に変換するだけです。たとえば、変数x
がint64の場合:
int(x)
がint64の配列の場合:
map(int, x)
Numpyデータ型があり、通常のint()またはfloat()データ型に変更するだけです。それは正常に動作します。