J'ai un programme qui traite les données sous forme de tableaux NumPy, qui doivent être stockés sous forme JSON (pour les transmettre ultérieurement à un autre programme afin de visualiser les données). Quand j'essaye ce qui suit:
my_array = np.array([3, 4, 5])
json.dumps(my_array)
Je reçois un message d'erreur
TypeError: array([3, 4, 5]) is not JSON serializable
Donc, il s'avère que les tableaux ne sont pas sérialisables. J'espérais résoudre ce problème en convertissant les tableaux en listes ordinaires, mais si j'essaie
my_array = np.array([3, 4, 5])
my_list = list(my_array)
json.dumps(my_list)
Je viens d'avoir une erreur de lecture
TypeError: 3 is not JSON serializable
(Ce 3
semble être parce que '3' est le premier élément de la liste)
Encore plus étrange, cette erreur persiste lorsque j'essaie de reconstruire une liste à partir de zéro:
def plain_list(ls):
pl = []
for element in ls:
pl.append(element)
return pl
my_array = np.array([3, 4, 5])
my_list = plain_list(my_array)
json.dumps(my_list)
revient toujours
TypeError: 3 is not JSON serializable
J'ai deux questions:
Ce 3
est un entier - NumPy qui s’affiche comme un int standard Python, mais n’en est pas un. Utilisez tolist
pour obtenir une liste des éléments ordinaires de Python:
json.dumps(my_array.tolist())
Cela convertira également les tableaux multidimensionnels en listes imbriquées, de sorte que vous n’aurez pas à gérer une compréhension de liste à 3 couches pour un tableau à 3 dimensions.
En plus de la réponse correcte de l'utilisateur2357112 sur la manière de faire fonctionner votre code, envisagez d'étendre json
pour pouvoir coder votre tableau comme spécifié here .