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))
Réponses:
J'ai trouvé mon problème. Le problème était que mes entiers étaient en fait de type
numpy.int64
.la source
Il semble qu'il puisse y avoir un problème pour vider numpy.int64 dans la chaîne json dans Python 3 et l'équipe python a déjà une conversation à ce sujet. Plus de détails peuvent être trouvés ici .
Il existe une solution de contournement fournie par Serhiy Storchaka. Cela fonctionne très bien donc je le colle ici:
la source
Cela a résolu le problème pour moi:
la source
Convertissez simplement les nombres de
int64
(de numpy) àint
.Par exemple, si la variable
x
est un int64:Si est un tableau de int64:
la source
comme @JAC l'a souligné dans les commentaires de la réponse la mieux notée, la solution générique (pour tous les types numpy) se trouve dans le fil de discussion Conversion de dtypes numpy en types python natifs .
Néanmoins, je vais ajouter ma version de la solution ci-dessous, car dans mon cas j'avais besoin d'une solution générique qui combine ces réponses et avec les réponses de l'autre fil. Cela devrait fonctionner avec presque tous les types numpy.
la source
Cela pourrait être la réponse tardive, mais récemment, j'ai eu la même erreur. Après beaucoup de surf, cette solution m'a aidé.
Appel
myconverter
àjson.dumps()
comme ci - dessous.json.dumps(alerts, default=myconverter).
la source
Vous pouvez également d'abord convertir votre objet en dataframe:
puis enregistrez-le
dataframe
dans unjson
fichier:J'espère que cela t'aides
la source
Vous avez le type de données Numpy, il suffit de passer au type de données normal int () ou float (). cela fonctionnera très bien.
la source
Même problème. La liste contenait des nombres de type numpy.int64 qui lève une TypeError. Une solution de contournement rapide pour moi était de
qui convertit la liste en str () et la fonction eval () évalue la «chaîne» comme une expression python et renvoie le résultat sous forme de liste d'entiers dans mon cas.
la source
utilisation
pour résoudre ce problème dans Python3:
la source