Ich versuche, ein einfaches Wörterbuch von Python an eine JSON-Datei zu senden, erhalte jedoch 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 Zeichenfolgen in die JSON-Datei geschrieben, was unerwünscht ist.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
Antworten:
Ich habe mein Problem gefunden. Das Problem war, dass meine ganzen Zahlen tatsächlich Typ waren
numpy.int64
.quelle
Es scheint ein Problem zu geben, numpy.int64 in Python 3 in json string zu speichern, und das Python-Team hat bereits ein Gespräch darüber. Weitere Details finden Sie hier .
Es gibt eine Problemumgehung, die von Serhiy Storchaka bereitgestellt wird. Es funktioniert sehr gut, also füge ich es hier ein:
quelle
Dies löste das Problem für mich:
quelle
Konvertieren Sie einfach Zahlen von
int64
(von numpy) nachint
.Wenn die Variable
x
beispielsweise ein int64 ist:If ist ein Array von int64:
quelle
Wie @JAC in den Kommentaren der am höchsten bewerteten Antwort hervorhob, finden Sie die generische Lösung (für alle Numpy-Typen) im Thread Konvertieren von Numpy-D-Typen in native Python-Typen .
Trotzdem werde ich meine Version der Lösung unten hinzufügen, da ich in meinem Fall eine generische Lösung brauchte, die diese Antworten mit den Antworten des anderen Threads kombiniert. Dies sollte mit fast allen Numpy-Typen funktionieren.
quelle
Dies könnte die späte Antwort sein, aber kürzlich habe ich den gleichen Fehler erhalten. Nach vielem Surfen hat mir diese Lösung geholfen.
Rufen Sie
myconverter
injson.dumps()
wie unten.json.dumps(alerts, default=myconverter).
quelle
Alternativ können Sie Ihr Objekt zuerst in einen Datenrahmen konvertieren:
und speichern Sie dies
dataframe
in einerjson
Datei:Hoffe das hilft
quelle
Sie haben den Numpy-Datentyp. Wechseln Sie einfach zum normalen Datentyp int () oder float (). es wird gut funktionieren.
quelle
Gleiches Problem. Liste enthielt Nummern vom Typ numpy.int64, die einen TypeError auslösen. Schnelle Problemumgehung für mich war zu
Die Funktion list in list (str () und eval () konvertiert den „String“ wie einen Python-Ausdruck und gibt das Ergebnis in meinem Fall als Liste von Ganzzahlen zurück.
quelle
verwenden
So beheben Sie dieses Problem in Python3:
quelle