json写入问题(TypeError:|json写入问题:TypeError: Object of type float32 is not JSON serializable)

问题描述
在将一个字典数据写入json文件时,遇到标题错误
问题分析
打印错误数据的数据类型type(),发现数据的类型为numpy.float32,python的内置类型float可以写入json,然而numpy类型的float不能写入json,所以应将numpy.float32转换成python内置的数据类型float

  • 附:numpy.array同样不能写入json文件,需要将numpy.array转换成list,例如a.tolist()
问题解决
使用a.item()或np.asscalar(a)将NumPy值转换为本机Python类型
import numpy as np # examples using a.item() type(np.float32(0).item()) # type(np.float64(0).item()) # type(np.uint32(0).item())# # examples using np.asscalar(a) type(np.asscalar(np.int16(0)))# type(np.asscalar(np.cfloat(0)))# type(np.asscalar(np.datetime64(0)))# type(np.asscalar(np.timedelta64(0))) #

问题二
上面问题涉及的是一个numpy值,将其转换成python内置类型即可,然而又遇到一个新问题,一个list,里面的每个元素都是numpy.int32类型,将其写入json报错:TypeError: Object of type int32 is not JSON serializable
问题分析
受问题一的启发,我将list中的每个元素都用item函数转换成python的内置类型,然而依旧报错:TypeError: Object of type int32 is not JSON serializable
问题解决
【json写入问题(TypeError:|json写入问题:TypeError: Object of type float32 is not JSON serializable)】先将list转换成numpy.array,在将numpy.array转换成list
import numpy as np import json b=np.array(a).tolist() json_str=json.dumps(b)

    推荐阅读