it-roy-ru.com

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

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

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

217
user1329894

Похоже, что может возникнуть проблема с выгрузкой numpy.int64 в строку json в Python 3, и команда разработчиков python уже обсуждает это. Более подробную информацию можно найти здесь .

Обходной путь предоставил Сергей Сторчака. Это работает очень хорошо, поэтому я вставляю это здесь:

def default(o):
    if isinstance(o, numpy.int64): return int(o)  
    raise TypeError

json.dumps({'value': numpy.int64(42)}, default=default)
16
hsc

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

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

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

0
Sriram Arvind Lakshmanakumar

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

df = pd.DataFrame(obj)

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

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

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

0
kartik