Я пытаюсь отправить простой словарь в файл json из python, но получаю сообщение «TypeError: 1425 is JSON serializable».
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()
Если я добавлю аргумент по умолчанию, то он записывает, но целочисленные значения записываются в файл json в виде строк, что нежелательно.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
Ответы:
Я нашел свою проблему. Проблема заключалась в том, что мои целые числа были типом
numpy.int64
.источник
Кажется, что может быть проблема с выгрузкой numpy.int64 в строку json в Python 3, и команда разработчиков python уже обсуждает это. Более подробную информацию можно найти здесь .
Обходной путь предоставил Сергей Сторчака. Это работает очень хорошо, поэтому я вставляю это здесь:
источник
Это решило проблему для меня:
источник
Просто конвертируйте числа из
int64
(из numpy) вint
.Например, если переменная
x
является int64:Если это массив int64:
источник
Как отметил @JAC в комментариях ответа с наивысшим рейтингом, общее решение (для всех типов numpy) можно найти в потоке Преобразование ntypty dtypes в нативные типы python .
Тем не менее, я добавлю свою версию решения ниже, так как в моем случае мне нужно общее решение, которое объединяет эти ответы и с ответами из другой ветки. Это должно работать почти со всеми типами NumPy.
источник
Это может быть поздний ответ, но недавно я получил ту же ошибку. После большого количества серфинга это решение помогло мне.
Звоните
myconverter
в ,json.dumps()
как показано ниже.json.dumps(alerts, default=myconverter).
источник
В качестве альтернативы вы можете сначала преобразовать ваш объект в массив данных:
и затем сохраните это
dataframe
вjson
файл:Надеюсь это поможет
источник
У вас есть Numpy Data Type, просто измените на обычный тип данных int () или float (). это будет работать нормально.
источник
Та же проблема. Список содержит номера типа numpy.int64, который выдает ошибку TypeError. Быстрый обходной путь для меня был
которая преобразует список в str (), а функция eval () вычисляет «String» как выражение Python и возвращает результат в виде списка целых чисел в моем случае.
источник
использование
чтобы решить эту проблему в Python3:
источник