Подтвердить что ты не робот

"TypeError: (Integer) не является сериализуемым JSON" при сериализации JSON в Python?

Я пытаюсь отправить простой словарь в 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))
4b9b3361

Ответ 1

Я нашел свою проблему. Проблема заключалась в том, что мои целые числа были на самом деле типа numpy.int64.

Ответ 2

Похоже, что может возникнуть проблема с выгрузкой 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)

Ответ 3

Это решило проблему для меня:

def serialize(self):
    return {
        my_int: int(self.my_int), 
        my_float: float(self.my_float)
    }

Ответ 4

Просто конвертируйте числа из int64 (из numpy) в int.

Например, если переменная x является int64:

int(x)

Если это массив int64:

map(int, x)

Ответ 5

В качестве альтернативы вы можете сначала преобразовать ваш объект в массив данных:

df = pd.DataFrame(obj)

и затем сохраните этот dataframe в файл json:

df.to_json(path_or_buf='df.json')

Надеюсь это поможет

Ответ 6

У вас есть Numpy Data Type, просто измените на обычный тип данных int() или float(). это будет работать нормально.