Ответ 1
Я нашел свою проблему. Проблема заключалась в том, что мои целые числа были на самом деле типа numpy.int64
.
Я пытаюсь отправить простой словарь в json файл из python, но я продолжаю получать сообщение "TypeError: 1425 не 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 уже поговорила об этом. Более подробную информацию можно найти здесь here.
Обходной путь предоставил Сергей Сторчака. Это работает очень хорошо, поэтому я вставляю это здесь:
def convert(o):
if isinstance(o, numpy.int64): return int(o)
raise TypeError
json.dumps({'value': numpy.int64(42)}, default=convert)
Это решило проблему для меня:
def serialize(self):
return {
my_int: int(self.my_int),
my_float: float(self.my_float)
}
int64
(из numpy) в int
. Например, если переменная x
является int64:
int(x)
Если это массив int64:
map(int, x)
В качестве альтернативы вы можете сначала преобразовать ваш объект в массив данных:
df = pd.DataFrame(obj)
и затем сохраните этот dataframe
в файл json
:
df.to_json(path_or_buf='df.json')
Надеюсь это поможет
У вас есть Numpy Data Type, просто измените на обычный тип данных int() или float(). это будет работать нормально.