Ich versuche, ein einfaches Wörterbuch aus Python an eine Json-Datei zu senden, erhalte aber weiterhin die Meldung "TypeError: 1425 ist nicht JSON serialisierbar".
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()
Wenn ich das Standardargument hinzufüge, schreibt es, aber die ganzzahligen Werte werden als Strings in die Json-Datei geschrieben, was unerwünscht ist.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
Ich habe mein Problem gefunden. Das Problem war, dass meine Ganzzahlen tatsächlich numpy.int64
waren.
In Python 3 scheint es ein Problem zu sein, numpy.int64 in json string auszulesen, und das Python-Team hat bereits ein Gespräch darüber. Weitere Details finden Sie hier .
Es gibt eine Problemumgehung von Serhiy Storchaka. Es funktioniert sehr gut, ich füge es hier ein:
def default(o):
if isinstance(o, numpy.int64): return int(o)
raise TypeError
json.dumps({'value': numpy.int64(42)}, default=default)
Dies löste das Problem für mich:
def serialize(self):
return {
my_int: int(self.my_int),
my_float: float(self.my_float)
}
int64
(von numpy) in int
.Wenn zum Beispiel die Variable x
ein int64 ist:
int(x)
Wenn ist Array von int64:
map(int, x)
Sie haben Numpy-Datentyp. Wechseln Sie einfach zum normalen Datentyp int () oder float (). es wird gut funktionieren.
Alternativ können Sie Ihr Objekt zuerst in einen Datenrahmen konvertieren:
df = pd.DataFrame(obj)
und speichern Sie diese dataframe
in einer json
-Datei:
df.to_json(path_or_buf='df.json')
Hoffe das hilft