I am trying to send a simple dictionary to a json file from python, but I keep getting the "TypeError: 1425 is not JSON serializable" message.
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()
If I add the default argument, then it writes, but the integer values are written to the json file as strings, which is undesirable.
afile.write(json.dumps(alerts,encoding='UTF-8',default=str))
I found my problem. The issue was that my integers were actually type numpy.int64
.
It seems like there may be a issue to dump numpy.int64 into json string in Python 3 and the python team already have a conversation about it. More details can be found here.
There is a workaround provided by Serhiy Storchaka. It works very well so I paste it here:
def default(o):
if isinstance(o, numpy.int64): return int(o)
raise TypeError
json.dumps({'value': numpy.int64(42)}, default=default)
You have Numpy Data Type, Just change to normal int() or float() data type. it will work fine.
Alternatively you can convert your object into a dataframe first:
df = pd.DataFrame(obj)
and then save this dataframe
in a json
file:
df.to_json(path_or_buf='df.json')
Hope this helps