Estou tentando enviar um dicionário simples para um arquivo json a partir de python, mas continuo recebendo a mensagem "TypeError: 1425 is not 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()
Se eu adicionar o argumento padrão, ele gravará, mas os valores inteiros serão gravados no arquivo json como seqüências de caracteres, o que é indesejável.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
Respostas:
Eu encontrei o meu problema. O problema era que meus números inteiros eram realmente do tipo
numpy.int64
.fonte
Parece que pode haver um problema para despejar numpy.int64 na string json no Python 3 e a equipe do python já tem uma conversa sobre isso. Mais detalhes podem ser encontrados aqui .
Existe uma solução alternativa fornecida por Serhiy Storchaka. Funciona muito bem, então colo aqui:
fonte
Isso resolveu o problema para mim:
fonte
Basta converter números de
int64
(de numpy) paraint
.Por exemplo, se a variável
x
for int64:If é a matriz do int64:
fonte
como o @JAC apontou nos comentários da resposta com a classificação mais alta, a solução genérica (para todos os tipos numpy) pode ser encontrada no segmento Convertendo tipos numpy em tipos nativos de python .
No entanto, adicionarei minha versão da solução abaixo, pois, no meu caso, eu precisava de uma solução genérica que combine essas respostas e as do outro segmento. Isso deve funcionar com quase todos os tipos numpy.
fonte
Esta pode ser a resposta tardia, mas recentemente recebi o mesmo erro. Depois de muita navegação, essa solução me ajudou.
Chamada
myconverter
emjson.dumps()
como abaixo.json.dumps(alerts, default=myconverter).
fonte
Como alternativa, você pode converter seu objeto em um dataframe primeiro:
e salve isso
dataframe
em umjson
arquivo:Espero que isto ajude
fonte
Você possui o tipo de dados Numpy, basta alterar para o tipo de dados normal int () ou float (). funcionará bem.
fonte
Mesmo problema. Lista de números contidos do tipo numpy.int64 que gera um TypeError. Solução rápida para mim foi
que converte list em str () e eval () avalia a "String" como uma expressão python e retorna o resultado como uma lista de números inteiros no meu caso.
fonte
usar
para resolver esse problema no Python3:
fonte