python json dump не может создавать дамп int32 на python 3, но может на python 2.7. Что делать? - PullRequest
0 голосов
/ 13 января 2020

Следующий (минимальный) код

import numpy as np
import json

a = np.array([3], dtype=np.int32)
json.dumps(a[0])

работает на python 2.7, но не работает на python 3.7.

Ошибка на 2.7:

Traceback (последний вызов был последним): Файл "", строка 1, в файле "C: \ code \ EPMD \ Kodex \ Python37 \ lib \ json__init __. Py", строка 231, в дампах возвращает _default_encoder.encode ( obj) Файл "C: \ code \ EPMD \ Kodex \ Python37 \ lib \ json \ encoder.py", строка 199, в файле encode chunks = self.iterencode (o, _one_shot = True) Файл "C: \ code \ EPMD \ Kodex \ Python37 \ lib \ json \ encoder.py ", строка 257, в iterencode вернуть _iterencode (o, 0) файл" C: \ code \ EPMD \ Kodex \ Python37 \ lib \ json \ encoder. py ", строка 179, по умолчанию вызывать TypeError (f'Object типа {o. class . name } 'TypeError: Объект типа int32 не является JSON serializable


Решения, которые предлагают преобразовать тип элементов в a, будут работать, но не будут хороши для меня, поскольку они потребуют, чтобы я проанализировал все элементы в выгружаемом объекте по одному один по типу, который не предпочтительнее, если не абсолютно необходимо. Я переношу свой код, и мне нужно, чтобы он работал с минимальными изменениями в существующем коде.


Большой код, который мне действительно нужен:

import numpy as np
import json

a = np.array([3], dtype=np.int32)
b = "hi"
json.dumps({'a': a[0], 'b': b})

И я не хотел бы Разобрать мое поле dict по полю вручную и выполнить анализ типов самостоятельно и в итоге получится эквивалент

json.dumps({'a': int(a[0]), 'b': b})

Что делать?

...