问题描述
在将一个字典数据写入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 'float'>
type(np.float64(0).item()) # <type 'float'>
type(np.uint32(0).item()) # <type 'long'>
# examples using np.asscalar(a)
type(np.asscalar(np.int16(0))) # <type 'int'>
type(np.asscalar(np.cfloat(0))) # <type 'complex'>
type(np.asscalar(np.datetime64(0))) # <type 'datetime.datetime'>
type(np.asscalar(np.timedelta64(0))) # <type 'datetime.timedelta'>
问题二
上面问题涉及的是一个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
问题解决
先将list转换成numpy.array,在将numpy.array转换成list
import numpy as np
import json
b=np.array(a).tolist()
json_str=json.dumps(b)