web-dev-qa-db-fra.com

TypeError: l'objet de type 'float32' n'est pas sérialisable JSON

Je travaille avec numpy.float32 nombres et ils n'entrent pas dans JSON. Quelle est la bonne approche pour surmonter ce problème?

import numpy as np
import json

a = np.float32(1)
json.dumps(a)

TypeError: Object of type 'float32' is not JSON serializable
24
Franco Piccolo

Il doit s'agir d'une chaîne, vous pouvez donc avoir:

json.dumps(str(a))

ÉDITER:

JSON est un format de sérialisation des données d'objets. Il ne se soucie pas vraiment des types Python, le paquet json essaie de traduire tout objet que vous passez json.dumps() en une chaîne via un conversion table qui ne supporte que certains types (voir doc ci-dessous).

C'est la raison pour laquelle je pense que c'est une bonne idée de simplement passer une chaîne pour éviter ce problème: numpy.float32 N'est tout simplement pas dans le tableau.

Parce que certains ont commenté que passer explicitement une chaîne à dumps "sonne mal", je vais juste ajouter le document ici

json.dumps (obj, *, skipkeys = False, assure_ascii = True, check_circular = True, allow_nan = True, cls = None, indent = None, separators = None, default = None, sort_keys = False, ** kw) Sérialisez obj à une chaîne au format JSON à l'aide de cette table de conversion. Les arguments ont la même signification que dans dump ().

Remarque Les clés dans les paires clé/valeur de JSON sont toujours de type str. Lorsqu'un dictionnaire est converti en JSON, toutes les clés du dictionnaire sont contraintes aux chaînes. Par conséquent, si un dictionnaire est converti en JSON, puis de nouveau dans un dictionnaire, le dictionnaire peut ne pas être identique à celui d'origine. C'est-à-dire, charges (dumps (x))! = X si x a des clés non-chaîne.

extrait des documents officiels ici: https://docs.python.org/3/library/json.html

19
vencaslac