Saya mencoba mengirim kamus sederhana ke file json dari python, tapi saya tetap mendapatkan pesan "TypeError: 1425 bukan 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()
Jika saya menambahkan argumen default, maka ia menulis, tetapi nilai integer ditulis ke file json sebagai string, yang tidak diinginkan.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
Jawaban:
Saya menemukan masalah saya. Masalahnya adalah bahwa bilangan bulat saya sebenarnya tipe
numpy.int64
.sumber
Sepertinya mungkin ada masalah untuk membuang numpy.int64 ke string json di Python 3 dan tim python sudah memiliki percakapan tentang hal itu. Rincian lebih lanjut dapat ditemukan di sini .
Ada solusi yang disediakan oleh Serhiy Storchaka. Ini bekerja sangat baik jadi saya tempel di sini:
sumber
Ini memecahkan masalah bagi saya:
sumber
Konversi angka dari
int64
(dari numpy) keint
.Misalnya, jika variabel
x
adalah int64:Jika array int64:
sumber
seperti @JAC tunjukkan dalam komentar dari jawaban berperingkat tertinggi, solusi umum (untuk semua tipe numpy) dapat ditemukan di utas Mengkonversi dtypes numpy ke tipe python asli .
Namun demikian, saya akan menambahkan versi solusi saya di bawah ini, karena dalam kasus saya, saya memerlukan solusi umum yang menggabungkan jawaban ini dan dengan jawaban dari utas lainnya. Ini harus bekerja dengan hampir semua tipe numpy.
sumber
Ini mungkin respons yang terlambat, tetapi baru-baru ini saya mendapat kesalahan yang sama. Setelah banyak berselancar, solusi ini membantu saya.
Panggil seperti
myconverter
dijson.dumps()
bawah ini.json.dumps(alerts, default=myconverter).
sumber
Atau Anda dapat mengkonversi objek Anda menjadi bingkai data terlebih dahulu:
dan kemudian simpan ini
dataframe
dalamjson
file:Semoga ini membantu
sumber
Anda memiliki Tipe Data Numpy, Cukup ubah ke tipe data normal int () atau float (). itu akan bekerja dengan baik.
sumber
Permasalahan yang sama. Daftar nomor berisi tipe numpy.int64 yang melempar TypeError. Solusi cepat bagi saya adalah untuk
yang mengubah list menjadi fungsi str () dan eval () mengevaluasi "String" seperti ekspresi python dan mengembalikan hasilnya sebagai daftar integer dalam kasus saya.
sumber
menggunakan
untuk mengatasi masalah ini di Python3:
sumber