J'essaie d'envoyer un dictionnaire simple à un fichier json à partir de python, mais je continue à recevoir le message "TypeError: 1425 n'est pas sérialisable JSON".
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()
Si j'ajoute l'argument par défaut, alors il écrit, mais les valeurs entières sont écrites dans le fichier JSON sous forme de chaînes, ce qui n'est pas souhaitable.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
J'ai trouvé mon problème. Le problème était que mes entiers étaient en réalité du type numpy.int64
.
Il semble qu'il soit possible de vider numpy.int64 dans une chaîne json dans Python 3 et que l'équipe python en a déjà une conversation. Plus de détails peuvent être trouvés ici .
Il existe une solution de contournement fournie par Serhiy Storchaka. Cela fonctionne très bien alors je le colle ici:
def default(o):
if isinstance(o, numpy.int64): return int(o)
raise TypeError
json.dumps({'value': numpy.int64(42)}, default=default)
Cela a résolu le problème pour moi:
def serialize(self):
return {
my_int: int(self.my_int),
my_float: float(self.my_float)
}
int64
(de numpy) en int
.Par exemple, si la variable x
est un int64:
int(x)
Si est un tableau de int64:
map(int, x)
Vous avez le type de données Numpy, il suffit de passer au type de données normal int () ou float (). cela fonctionnera bien.
Sinon, vous pouvez d'abord convertir votre objet en une image de données:
df = pd.DataFrame(obj)
puis enregistrez cette dataframe
dans un fichier json
:
df.to_json(path_or_buf='df.json')
J'espère que cela t'aides