【Python】TypeError: Object of type ‘int64‘ is not JSON serializable (或者float32)

水深无声 2021-10-30 02:04 353阅读 0赞

在使用json格式保存数据时,经常会遇到xxx is not JSON serializable,也就是无法序列化某些对象格式,我所遇见的是我使用了numpy时,使用了np的数据格式,写入data后,json.dumps(data)失败,我们可以自己定定义对特定类型的对象的序列化,下面看下怎么定义和使用关于np数据类型的自定义。

1.首先,继承json.JSONEncoder,自定义序列化方法。

  1. class NpEncoder(json.JSONEncoder):
  2. def default(self, obj):
  3. if isinstance(obj, np.integer):
  4. return int(obj)
  5. elif isinstance(obj, np.floating):
  6. return float(obj)
  7. elif isinstance(obj, np.ndarray):
  8. return obj.tolist()
  9. else:
  10. return super(NpEncoder, self).default(obj)

2.使用dumps方法(我们可以直接把dict直接序列化为json对象)加上 cls=NpEncoder,data就可以正常序列化了

json.dumps(data, cls=NpEncoder)
其实,很简单,自定义一个序列化方法,然后dumps的时候加上cls=NpEncoder

二、处理问题出现的坑

如果构造的json串中包含有汉字的情况则会出现以下情况:

  1. import json
  2. dic = {"name"

发表评论

表情:
评论列表 (有 0 条评论,353人围观)

还没有评论,来说两句吧...

相关阅读